Опубликован: 14.06.2015 | Доступ: свободный | Студентов: 7362 / 1131 | Длительность: 09:49:00
Авторские права: Creative Commons Attribution 3.0
Самостоятельная работа 9:

Словари

< Самостоятельная работа 1 || Самостоятельная работа 9: 123

По ссылке youtube выложено видео с русскими титрами.

Словарь (dictionary) похож на список, но имеет более широкие возможности. В списке позиция (или индекс) имеет целочисленное значение, в словаре индекс может быть (почти) любого типа.

Вы можете представить словарь как отображение между множеством индексов (тут они называются ключами) и множеством значений. Каждый ключ (key) отображается на значение. Связь между ключом и значением называется парой ключ-значение (key-value pair) или иногда записью (item).

В качестве примера, мы создадим словарь, который отображает английские и испанские слова, таким образом ключи и значения являются строками.

Функция dict создает новый словарь без записей. Т.к. dict - имя встроенной функции, вы должны исключить его из имен переменных.

>>> eng2sp = dict()
>>> print eng2sp
{}

Фигурные кавычки означают пустой словарь. Для добавления записей в словарь, можно использовать квадратные скобки:

>>> eng2sp['one'] = 'uno'

Эта строка создает запись, которая отображает ключ 'one' на значение 'uno'. Если мы распечатаем словарь снова, то увидим пару ключ-значение, разделенную двоеточием:

>>> print eng2sp
{'one': 'uno'}

Этот выходной формат совпадает с входным форматом. Например, можно создать новый словарь с тремя записями:

>>> eng2sp = {'one': 'uno', 'two': 'dos', 'three': 'tres'}

Если вы выведете на экран содержимое переменной eng2sp, то удивитесь:

>>> print eng2sp
{'three': 'tres', 'two': 'dos', 'one': 'uno'}

Порядок пар ключ-значение не совпадает. Фактически, если вы наберете этот же пример на своем компьютере, то можете получить совершенно другой результат. Порядок записей в словаре непредсказуем.

Но это не проблема, т.к. элементы словаря никогда не индексируются числовыми индексами. Вместо этого вы используете ключи для поиска соответствующих значений:

>>> print eng2sp['two']
dos

Ключ 'two' всегда отображается на значение 'dos', поэтому порядок записей не имеет значения.

Если ключ отсутствует в словаре, вы получите исключение:

>>> print eng2sp['four']
Traceback (most recent call last):
File "<pyshell#8>", line 1, in <module>
print eng2sp['four']
KeyError: 'four'

Функция len работает для словарей, она возвращает число пар ключ- значение:

>>> len(eng2sp)
3

Оператор in работает для словарей, он сообщает о похожих ключах в словаре.

>>> 'one' in eng2sp
True
>>> 'uno' in eng2sp
False

Чтобы убедиться, что какое-то значение встречается в словаре, вы можете использовать метод values, который возвращает значения в виде списка, а затем использовать оператор in:

>>> vals = eng2sp.values()
>>> 'uno' in vals
True

Оператор in использует различные алгоритмы для списков и словарей. Для списков он использует алгоритм линейного поиска. Время поиска пропорционально длине списка.

Для словарей Python использует алгоритм хеш-таблиц (hash table), который имеет замечательные свойства; in оператор занимает примерно столько же времени, сколько записей есть в словаре. Я не буду объяснять, почему хэш-функции, такие хорошие, но вы можете узнать об этом подробнее: http://wikipedia.org/wiki/Hash_table

< Самостоятельная работа 1 || Самостоятельная работа 9: 123
Алексей Виноградов
Алексей Виноградов

Видеокурс выложен на сайте Altube.ru вместо Youtube и плеер Altube не поддерживает субтитры. Прошу решить вопрос о предоставлении русских субтитров в этом англоязычном видеокурсе.

Петр Олейников
Петр Олейников

Данные файлы неоходимы не только для самостоятельных работ, но и для тестов. А по ссылкам в лекциях они не доступны, выдает ошибку 404.