В предыдущем уроке я говорил об очень универсальном и гибком объектном типе в Python, а именно списках . В этой статье я продолжаю свои курсы повышения квалификации с другим гибким типом объектов Python, называемым словарями (также называемыми ассоциативными массивами или хэшами ). Как и список, словарь является важной концепцией, которую нужно понять, чтобы продвинуться вперед в вашем путешествии по Python.
Что такое словарь в любом случае?
Если вы просмотрели статью « Списки» , вам будет легко понять концепцию словарей. Они очень похожи на списки, но с двумя основными отличиями:
- Это неупорядоченные множества (в отличие от упорядоченных списков).
- Ключи используются для доступа к элементам, а не к позиции ( то есть к индексу).
Каждый ключ в словаре имеет значение, которое может иметь любой тип объекта Python. То есть словари можно рассматривать как пары ключ-значение . Но будьте осторожны, ключи не могут быть типа List или Dictionary.
Давайте создадим англо-французский словарь
Как мы видели в предыдущем разделе, словарь — это просто неупорядоченный набор пар ключ-значение. Давайте использовать эту концепцию для создания нашего первого примера, англо-французского словаря. Этот словарь может быть создан следующим образом:
english_french = {'paper':'papier', 'pen':'stylo', 'car':'voiture', 'table':'table','door':'porte'}
Словарь english_french
содержит пять английских слов, заданных в качестве ключей, а французские значения — в качестве значений .
Допустим, мы хотели знать, как сказать « pen
по-французски. Мы просто делаем следующее:
english_french['pen']
где вы получите stylo
в качестве возвращаемого значения.
Делать вещи интереснее
Допустим, у нас был словарь french_spanish
с теми же словами, что и в словаре english_french
:
french_spanish = {'papier':'papel', 'stylo':'pluma', 'voiture':'coche', 'table':'mesa', 'porte':'puerta'}
Ну, вас спросили, как сказать door
по-испански, и у вас нет англо-испанского словаря под рукой! Но не волнуйтесь, есть решение. Консультируйтесь со своим английским- english_french
словарем для слова, затем используйте результат, чтобы просмотреть french_spanish
словарь. Понял? Давайте посмотрим, как мы можем сделать это в Python:
french_spanish[english_french['door']]
Результат должен быть puerta
. Разве это не очень хорошо? Вы только что получили слово для door
на испанском языке, хотя у вас нет англо-испанского словаря.
Больше операций со словарями
В предыдущем примере мы увидели, как мы можем создать словарь и получить доступ к элементам в словаре. Давайте посмотрим еще несколько операций, которые мы можем сделать над словарями. Я собираюсь использовать словарь english_french
в примерах ниже.
Сколько записей в словаре?
Другими словами, эта операция предназначена для возврата количества пар ключ-значение в Словаре. Это можно сделать с помощью оператора len()
следующим образом:
len(english_french)
Вы должны вернуть 5
.
Удаление ключа
Удаление элемента в Словаре осуществляется с помощью клавиш . Например, допустим, мы хотели удалить слово (ключ) из словаря. Это можно просто сделать следующим образом:
del english_french['door']
Это удалит ключевую door
вместе с ее значением porte
.
Есть ли ключ в словаре?
В предыдущем подразделе мы удалили ключевую door
из словаря. Если мы хотим проверить, существует ли door
в Словаре или нет, мы набираем:
'door' in english_french
который должен вернуть False
.
Итак, что, по вашему мнению, вернет следующее утверждение? Идите и попробуйте (обратите внимание, not
).
'door' not in english_french
Что произойдет, если мы попытаемся получить доступ к ключу , который не существует в словаре? Скажи english_french['door']
. В этом случае вы получите ошибку, подобную следующей:
Traceback (most recent call last):
File "dictionary.py", line 7, in <module>
print english_french['door']
KeyError: 'door'
Создание копии вашего словаря
Вам может понадобиться копия вашего словаря english_french
и присвоить ее другому словарю. Это можно просто сделать с помощью функции copy()
следующим образом:
new_english_french = english_french.copy()
Вложенные словари
Как мы упоминали выше, значения в словарях могут быть любого типа, включая словари. Это называется вложенностью . Пример этого может быть следующим:
student = {'ID':{'name':'Abder-Rahman', 'number':'1234'}}
Таким образом, если вы наберете student['ID']
, вы должны получить:
{'name': 'Abder-Rahman', 'number': '1234'}
Перебор словаря
Вернемся к словарю english_french
. Существует много способов перебора элементов словаря:
for word in english_french:
print word
Результат этого утверждения следующий:
car
pen
paper
door
table
Обратите внимание, что ключи в результате не даны в том же порядке, что и в словаре english_french
. Теперь вы можете понять, почему я сказал, что словари считаются неупорядоченными множествами.
Другой способ перебора ключей заключается в следующем:
for word in english_french.iterkeys():
print word
Обратите внимание, что мы использовали iterkeys()
. Аналогичная функция, которая может использоваться для перебора значений, а именно itervalues()
, выглядит следующим образом:
for meaning in english_french.itervalues():
print meaning
Результат в этом случае должен выглядеть примерно так:
voiture
stylo
papier
porte
table
Альтернативные способы создания словарей
Существуют альтернативные способы создания словаря в Python с использованием конструктора dict
. Ниже приведены некоторые примеры создания одинакового ID
словаря с помощью dict
:
ID = dict(name = 'Abder-Rahman', number = 1234)
ID = dict([('name','Abder-Rahman'),('number',1234)])
ID = dict(zip(['name','number'],['Abder-Rahman',1234])) # keys and values as Lists
Есть еще, что вы можете сделать со словарями. Проверьте документацию Python для получения дополнительной информации.