Словари. Создание словаря. Изменение словаря. Словари со смешанными значениями
Словари
Словарь — это неупорядоченное множество пар ключ—значение. Когда вы добавляете ключ в словарь, вы также должны добавить и значение для этого ключа. (Значение всегда можно изменить позже. ) Словари в Python оптимизированы для получения значения по известному ключу, но не для других целей.
| Словарь в Python аналогичен хэшу в Perl 5. В Perl 5 переменные, хранящие хэши, всегда начинаются с символа %. В Python переменные могут быть названы как угодно, язык сам отслеживает типы данных.
|
Создание словаря
Создать словарь очень просто. Синтаксис похож на синтаксис создания множеств, но вместо элементов, используются пары ключ-значение. Если у вас есть словарь, вы можете просматривать значения по их ключу.
> > > a_dict = {'server': 'db. diveintopython3. org', 'database': 'mysql'} ①
> > > a_dict
{'server': 'db. diveintopython3. org', 'database': 'mysql'}
> > > a_dict['server'] ②
'db. diveintopython3. org'
> > > a_dict['database'] ③
'mysql'
> > > a_dict['db. diveintopython3. org'] ④
Traceback (most recent call last):
File " < stdin> ", line 1, in < module>
KeyError: 'db. diveintopython3. org'
Перевод сообщения оболочки:
Раскрутка стека (список последних вызовов):
Файл " < stdin> ", строка 1, < модуль>
KeyError: 'db. diveintopython3. org'
①
| Сначала вы создаёте новый словарь с двумя элементами и присваиваете его переменной a_dict. Каждый элемент является парой ключ—значение, а весь набор элементов заключён в фигурные скобки.
|
②
| 'server' является ключом, и он связан со значением, обращение к которому с помощью a_dict['server'] даст нам 'db. diveintopython3. org'.
|
③
| 'database' является ключом, и он связан со значением, обращение к которому с помощью a_dict['database'] даст нам 'mysql'.
|
④
| Можно получить значение по ключу, но нельзя получить ключи по значению. Так a_dict['server'] — это 'db. diveintopython3. org', но a_dict['db. diveintopython3. org'] породит исключение, потому что 'db. diveintopython3. org' не является ключом.
|
Изменение словаря
Словари не имеют какого-либо предопределенного ограничения размера. Когда угодно можно добавлять новые пары ключ—значение в словарь или изменять значение, соответствующее существующему ключу. Продолжим предыдущий пример:
> > > a_dict
{'server': 'db. diveintopython3. org', 'database': 'mysql'}
> > > a_dict['database'] = 'blog' ①
> > > a_dict
{'server': 'db. diveintopython3. org', 'database': 'blog'}
> > > a_dict['user'] = 'mark' ②
> > > a_dict ③
{'server': 'db. diveintopython3. org', 'user': 'mark', 'database': 'blog'}
> > > a_dict['user'] = 'dora' ④
> > > a_dict
{'server': 'db. diveintopython3. org', 'user': 'dora', 'database': 'blog'}
> > > a_dict['User'] = 'mark' ⑤
> > > a_dict
{'User': 'mark', 'server': 'db. diveintopython3. org', 'user': 'dora', 'database': 'blog'}
①
| Ваш словарь не может содержать одинаковые ключи. Присвоение значения существующему ключу уничтожит старое значение.
|
②
| Можно добавлять новые пары ключ—значение когда угодно. Данный синтаксис идентичен синтаксису модифицирования существующих значений.
|
③
| Кажется, что новый элемент словаря (ключ 'user', значение 'mark') попал в середину. На самом деле, это всего лишь совпадение, что элементы кажутся расположенными по порядку в первом примере; такое же совпадение, что теперь они выглядят расположенными не по порядку.
|
④
| Присвоение значения существующему ключу просто заменяет старое значение новым.
|
⑤
| Изменится ли значение ключа 'user' обратно на " mark"? Нет! Посмотрите на него внимательнее — ключ " User" написан с заглавной буквы. Ключи словаря регистрозависимы, поэтому это выражение создаст новую пару ключ—значение, а не перезапишет существующую. Вам кажется, что ключи похожи, а с точки зрения Python они абсолютно разные.
|
Словари со смешанными значениями
Словари могут состоять не только из строк. Значения словарей могут быть любого типа, включая целые, логические, произвольные объекты, или даже другие словари. И значения в одном словаре не обязаны быть одного и того же типа; можно смешивать и сочетать их, как вам необходимо. Ключи словаря более ограниченны, но они могут быть строками, целыми числами и некоторыми другими типами. Ключи разных типов тоже можно смешивать и сочетать в одном словаре.
На самом деле вы уже видели словарь с не строковыми ключами и значениями в вашей первой программе на Python.
SUFFIXES = {1000: ['KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'],
1024: ['KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB']}
Давайте вытащим эту переменную из нашей программы и поработаем с ней в интерактивной оболочке Python.
> > > SUFFIXES = {1000: ['KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'],
... 1024: ['KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB']}
> > > len(SUFFIXES) ①
2
> > > 1000 in SUFFIXES ②
True
> > > SUFFIXES[1000] ③
['KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']
> > > SUFFIXES[1024] ④
['KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB']
> > > SUFFIXES[1000][3] ⑤
'TB'
①
| Так же, как для списков и множеств, функция len() возвращает количество элементов словаря.
|
②
| И так же, как со списками и множествами, можно использовать оператор in, чтобы проверить, определён ли конкретный ключ в словаре.
|
③
| 1000 является ключом в словаре SUFFIXES; его значение — список из восьми элементов (восьми строк, если быть точным).
|
④
| Аналогично, 1024 — ключ словаря SUFFIXES; и его значение также является списком из восьми элементов.
|
⑤
| Так как SUFFIXES[1000] является списком, то можно обратиться к отдельным элементам списка по их порядковым номерам, которые индексируются с нуля.
|
Воспользуйтесь поиском по сайту: