Статьи

Плавное обновление на словарях Python

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

Если вы просмотрели статью « Списки» , вам будет легко понять концепцию словарей. Они очень похожи на списки, но с двумя основными отличиями:

  1. Это неупорядоченные множества (в отличие от упорядоченных списков).
  2. Ключи используются для доступа к элементам, а не к позиции ( то есть к индексу).

Каждый ключ в словаре имеет значение, которое может иметь любой тип объекта 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 для получения дополнительной информации.