В глубь языка Python


Словари


Сделаем небольшое отступление, так как вам необходимо познакомиться со словарями, кортежами и списками. Если вы знаток Perl, то уже имеете некоторое представление о словарях и списках, но вам, тем не менее, необходимо обратить внимание на кортежи.

Один из втроенных типов языка Python, словарь, сопоставляет ключам значения.

Словари в Python аналогичны хешам в Perl. В Perl имена переменных, хранящих хеши, всегда начинаются с символа %. Переменные в языке Python могут иметь произвольное имя, интерпретатор сам определяет их тип.
Словари в Python схожи с экземплярами класса Hashtable в Java.
Словари Python схожи с экземплярами объекта Scripting.Dictionary в Visual Basic.

Пример 1.9. Определени словарей

>>> d = {"server":"mpilgrim", "database":"master"}

>>> d {'server': 'mpilgrim', 'database': 'master'} >>> d["server"]

'mpilgrim' >>> d["database"]

'master' >>> d["mpilgrim"]

Traceback (innermost last): File "<interactive input>", line 1, in ? KeyError: mpilgrim

Сначала мы создаем словарь с двумя записями и присваиваем его переменной d. Каждая запись является парой ключ-значение, весь набор записей перечисляется в фигурных скобках.
"server" является ключом, а ассоциированное с ним значение, d["server"], равно "mpilgrim".
"database" является ключом, а ассоциированное с ним значение, d["database"], равно "master".
Вы можете определить значение по ключу, но не можете определить ключи по значению. Так, выражение d["server"] дает "mpilgrim", но d["mpilgrim"] генерирует исключение, так как словарь не содержит записи с ключом "mpilgrim".

Пример 1.10. Изменение словарей

>>> d {'server': 'mpilgrim', 'database': 'master'} >>> d["database"] = "pubs"

>>> d {'server': 'mpilgrim', 'database': 'pubs'} >>> d["uid"] = "sa"


>>> d {'server': 'mpilgrim', 'uid': 'sa', 'database': 'pubs'}
Ключи в словаре уникальны. Присваивание нового значения с существующим ключом заменяет старое.
В любой момент вы можете добавить новую запись. Синтаксис добавления записи аналогичен синтаксису замены значения в записи с существующим ключом. Возможно, в какой-то момент вы будете думать, что добавляете новую запись, в то время как на самом деле вы только изменяете значение в уже существующей записи.
Обратите внимание, что новая запись (ключ "uid", значение "sa") появилась в середине. В самом деле, то что записи появились в том же порядке, в котором были введены — это случайность.

Словари не поддерживают порядок следования записей. Говорить, что порядок следования записей нарушается, некорректно — они просто не упорядочены. Эта важная особенность возможно будет раздражать, когда вы захотите получить записи в каком-то определенном воспроизводимом порядке (например, в алфавитном порядке ключей). Конечно, существует возможность это сделать, просто такая возможность не встроена в словарь.
Пример 1.11. Смешивание различных типов данных в словарях

>>> d {'server': 'mpilgrim', 'uid': 'sa', 'database': 'pubs'} >>> d["retrycount"] = 3


>>> d {'server': 'mpilgrim', 'uid': 'sa', 'database': 'master', 'retrycount': 3} >>> d[42] = "douglas"


>>> d {'server': 'mpilgrim', 'uid': 'sa', 'database': 'master', 42: 'douglas', 'retrycount': 3}
Словари предназначены не только для строк. Значения в словарях могут быть любого типа: строки, числа и даже другие словари. Совсем не обязательно, чтобы все значения в одном словаре были одного типа, по мере необходимости вы можете смешивать объекты различных типов.
На ключи в словарях все же накладываются некоторые ограничения. Они могут быть строками, числами и объектами некоторых других типов (более подробно об этом мы раскажем позже). Вы также можете использовать ключи разного типа в одном словаре.


Пример 1.12. Удаление записей из словарей

>>> d {'server': 'mpilgrim', 'uid': 'sa', 'database': 'master', 42: 'douglas', 'retrycount': 3} >>> del d[42]


>>> d {'server': 'mpilgrim', 'uid': 'sa', 'database': 'master', 'retrycount': 3} >>> d.clear()


>>> d {}
Инструкция del позволяет удалять отдельные записи из словаря по ключу.
Метод clear удаляет все записи из словаря. Обратите внимание, что пустые фигурные скобки определяют словарь, не содержащий ни одной записи.
Пример 1.13. Регистр букв в строках имеет значение

>>> d = {} >>> d["key"] = "value" >>> d["key"] = "other value"


>>> d {'key': 'other value'} >>> d["Key"] = "third value"




>>> d {'Key': 'third value', 'key': 'other value'}
Присваивание значения с существующим ключом просто заменяет старое значение на новое.
В этом случае мы не присваиваем значение с существующим ключом, так как Python различает регистр букв в строках, и строка 'key' не равна 'Key'. Буквы разного регистра могут выглядеть для вас похожими, но для интерпретатора они совершенно разные. Таким образом в данном случае в словарь добавляется новая запись.
Дополнительная литература

  • обучает работе со словарями и показывает, как .
  • приводит множество .
  • В обсуждается .
  • В описаны .
  7  
Copyright © 2000, 2001, 2002

Copyright © 2001, 2002, 2003 Перевод,

Содержание раздела