Видеокурс выложен на сайте Altube.ru вместо Youtube и плеер Altube не поддерживает субтитры. Прошу решить вопрос о предоставлении русских субтитров в этом англоязычном видеокурсе. |
Словари
По ссылке 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