Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Словари. Создание словаря. Изменение словаря. Словари со смешанными значениями




Словари

Словарь — это неупорядоченное множество пар ключ—значение. Когда вы добавляете ключ в словарь, вы также должны добавить и значение для этого ключа. (Значение всегда можно изменить позже. ) Словари в 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] является списком, то можно обратиться к отдельным элементам списка по их порядковым номерам, которые индексируются с нуля.
Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...