Програмиране с Python: Списъци, n-торки, множества
Author: Стефан Кънев, Николай Бачийски и Димитър Димитров

# Речници

### „ Програмиране с Python“, ФМИ

### Стефан Кънев, Николай Бачийски & Димитър Димитров

#### 10.03.2008г.

# Речници

- Речниците са структури, които съпоставят един обект (ключ) на друг (стойност) - например име -> телефонен номер или град -> държава.
- Други имена на тази структура - хеш, карта (map) и асоциативен масив.
- Ключът трябва да е immutable (число, низ, n-орка)
- Синтаксисът в Python е следния:

      >>> languages = {
          'Spain': 'Spanish',
          'Great Britain': 'English',
          'Italy': 'Italian',
          'Mexico': 'Spanish',
          'France': 'French',
          'USA': 'English',
      }

- Достъпът става със средни скоби:

      >>> print languages['Mexico']
      'Spanish'

# Речници (2)

    >>> capitals = {
        'Germany': 'Berlin',
        'France': 'Paris',
        'Brazil': 'Brasilia',
        'Malaysia': 'Kuala Lumpur',
    }
    >>> print capitals['Brazil']
    'Brasilia'
    >>> capitals['Brazil'] = 'Brazil'
    >>> print capitals['Brazil']
    'Brazil'
    >>> capitals['Sweden'] = 'Stockholm'
    >>> print capitals['Sweden']
    'Stockholm'
    >>> del capitals['Malaysia']
    >>> print capitals['Malaysia']

    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    NameError: name 'capitals' is not defined

# Речници — методи

    >>> capitals = {
        'Germany': 'Berlin',
        'France': 'Paris',
        'Brazil': 'Rio de Janeiro',
        'Sweden': 'Stockholm',
    }

    >>> capitals.get('Assyria')
    None
    >>> capitals.get('Assyria', "I don't know")
    "I don't know"
    >>> capitals.has_key('Sweden')
    True
    >>> capitals.keys()
    ['Brazil', 'France', 'Germany', 'Sweden']
    >>> capitals.values()
    ['Berlin', 'Paris', 'Brazil', 'Stockholm']

# Речници — методи (2)

    >>> numbers = {
        "One": "I",
        "Two": "II",
    }

    >>> numbers.items()
    [('One', 'I'), ('Two', 'II')]
    >>> numbers.update({"Three": "III", "Four": "IV"})
    {'Four': 'IV', 'Three': 'III', 'Two': 'II', 'One': 'I'}
    >>> numbers.pop('Four')
    'IV'
    >>> numbers
    {'Three': 'III', 'Two': 'II', 'One': 'I'}
    >>> numbers.popitem()
    {'Three': 'III'}
    >>> numbers.popitem()
    {'One': 'I'}

# Два други начина за създаване на речник

- Чрез наименовани параметри към конструктура (не питайте):

      >>> dict(france="Paris", italy="Rome")
      {'italy': 'Rome', 'france': 'Paris'}

- Чрез списък от двойки

      >>> dict([('One', 'I'), ('Two', 'I')])
      {'Two': 'I', 'One': 'I'}

# Отново към for цикъла

- Синтаксис:

      for [променлива] in [колекция]
          [блок]

- Оператора `break` излиза от цикъла
- Оператора `continue` прекъсва текущата итерация и продължава изпълнението на цикъла от следващия елемент

# ... range() ...

`range(x, y)` връща списък от числата в интервала [x, y)

    >>> range(0, 10)
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> range(10)
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> range(0, 10, 2)
    [0, 2, 4, 6, 8]
    >>> range(10, 0, -1)
    [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

# Пример за for

    for n in range(0, 20):
        if n % 2: continue
        print n
        if n > 10: break

Произвежда следния резултат:

    0
    2
    4
    6
    8
    10
    12

# Пример

    roman = {1: 'I', 2: 'II', 3: 'III', 4: 'IV', 5: 'V'}
    numbers = [2, 3, 5]

    for n in numbers:
        print n, "is", roman[n]

Получава:

    2 is II in Roman numbers
    3 is II in Roman numbers
    5 is V in Roman numbers