16 сентября 2012 г.

Словари, углубляемся

В данном уроке более подробно будет описано про словари и про методы для работы со словарями.

Словари, пожалуй, самый гибкий встроенный тип данных в языке программирования Python.
В списках объекты упорядочены, но в их сравнении в словарях объекты упорядочены по ключам, и вызов объекта происходит не по их идентификатору или же по смещению, а с помощью ключа.




Операция - Интерпретация
D = {}  - Пустой словарь
D = {‘spam’: 2, ‘eggs’: 3}  - Словарь из двух элементов
D = {‘food’: {‘ham’: 1, ‘egg’: 2}}  - Вложение

D = dict(name=’Bob’, age=40) - Альтернативные способы создания  словарей:
D = dict(zip(keyslist, valslist))   именованные аргументы, применение 
D = dict.fromkeys([‘a’, ‘b’])      функции zip, списки ключей

D[‘eggs’] -  Доступ к элементу по ключу
D[‘food’][‘ham’]

‘eggs’ in D - Проверка на вхождение: проверка наличия ключа
D.keys() - Методы: список ключей, 
D.values() - список значений, 
D.items() - список ключей и значений,
D.copy() - копирование, 
D.get(key, default) - получение значения по умолчанию, 
D.update(D2) - слияние, 
D.pop(key) - удаление и так далее
len(D)  - Длина (количество элементов)
D[key] = 42 - Добавление/изменение ключей,
del D[key] - удаление ключей 

list(D.keys())  - Представления словарей (в Python 3.0)
D1.keys() & D2.keys()

D = {x: x*2 for x in range(10)}  - Генераторы словарей (в Python 3.0)


% python
>>> D = {‘spam’: 2, ‘ham’: 1, ‘eggs’: 3} # Создание словаря
>>> D[‘spam’]                    # Извлечение значения по ключу
2
>>> D                            # Случайный порядок следования 
{‘eggs’: 3, ‘ham’: 1, ‘spam’: 2}


Здесь  переменной D  присваивается словарь, в  котором  ключу  ‘spam’ соответ-
ствует целочисленное значение 2, и так далее. Для доступа к элементам слова-
ря используется тот же самый синтаксис с квадратными скобками, что и при 
извлечении элементов списков, но в данном случае доступ осуществляется по 
ключу, а не по позиции элемента.


>>> len(D)                 # Число элементов словаря

>>> ‘ham’ in D             # Проверка на вхождение
True
>>> list(D.keys())         # Создает новый список ключей
[‘eggs’, ‘ham’, ‘spam’]
>>> D
{‘eggs’: 3, ‘ham’: 1, ‘spam’: 2}
>>> D[‘ham’] = [‘grill’, ‘bake’, ‘fry’] # Изменение элемента
>>> D
{‘eggs’: 3, ‘ham’: [‘grill’, ‘bake’, ‘fry’], ‘spam’: 2}
>>> del D[‘eggs’]                       # Удаление элемента
>>> D
{‘ham’: [‘grill’, ‘bake’, ‘fry’], ‘spam’: 2}
>>> D[‘brunch’] = ‘Bacon’      # Добавление нового элемента
>>> D
{‘brunch’: ‘Bacon’, ‘ham’: [‘grill’, ‘bake’, ‘fry’] , ‘spam’: 2}

Дополнительные методы словарей
Методы словарей обеспечивают выполнение различных операций. Например, 
методы словарей values и items возвращают список значений элементов словаря 
и кортежи пар (key, value) соответственно:
>>> D = {‘spam’: 2, ‘ham’: 1, ‘eggs’: 3}
>>> list(D.values())
[3, 1, 2]
>>> list(D.items())
[(‘eggs’, 3), (‘ham’, 1), (‘spam’, 2)]

>>> D.get(‘spam’)             # Ключ присутствует в словаре
2
>>> print(D.get(‘toast’))     # Ключ отсутствует в словаре
None
>>> D.get(‘toast’, 88)
88

Метод update реализует своего рода операцию конкатенации для словарей, при этом он не имеет никакого отношения к упорядочению элементов слева направо (для словарей такое упорядочение не имеет смысла).

Он объединяет ключи и значения одного словаря с ключами и значениями другого, просто перезаписывая значения с одинаковыми ключами:
>>> D
{‘eggs’: 3, ‘ham’: 1, ‘spam’: 2}
>>> D2 = {‘toast’:4, ‘muffin’:5}
>>> D.update(D2)
>>> D
{‘toast’: 4, ‘muffin’: 5, ‘eggs’: 3, ‘ham’: 1, ‘spam’: 2}

Наконец, метод pop  удаляет ключ из словаря и возвращает его значение. Он напоминает метод pop списков, только вместо необязательного индекса элемента принимает ключ:
# удаление элементов словаря по ключу
>>> D
{‘toast’: 4, ‘muffin’: 5, ‘eggs’: 3, ‘ham’: 1, ‘spam’: 2}
>>> D.pop(‘muffin’)
5
>>> D.pop(‘toast’)# Удаляет и возвращает значение заданного ключа

>>> D
{‘eggs’: 3, ‘ham’: 1, ‘spam’: 2} 
# удаление элементов списка по номеру позиции
>>> L = [‘aa’, ‘bb’, ‘cc’, ‘dd’]
>>> L.pop()  # Удаляет и возвращает последний элемент списка
‘dd’
>>> L
[‘aa’, ‘bb’, ‘cc’]
>>> L.pop(1) # Удаляет и возвращает элемент из заданной позиции
‘bb’
>>> L
[‘aa’, ‘cc’]


На этом короткий курс по словарям окончен, ждите следующий урок по кортежам и файлам...






1 комментарий:

  1. и ни слова о методе "D[key].append(data)", добавляющим в значение-список ключа key новый элемент

    ОтветитьУдалить