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

Словари

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

Смотреть лекцию на: ИНТУИТ | youtube.com

Если проблемы с видео, нажмите выше ссылку youtube

Get Adobe Flash Player

По ссылке 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
Ксения Шошина
Ксения Шошина

курс Программирование на Python

Илья Кизилов
Илья Кизилов

В лекции приводится программа для сортировки слов по их длинне. В коде ошибка. Я исправил так:

def sort_by_length(words):

words = words.split()

t = []

for word in words:

t.append((len(word), word))

t.sort(reverse=True)

res = []

for length, word in t:

res.append(word)

return res

print(sort_by_length(words))

 

Кто ещё как сделал?

 

Максим Лаврентьев
Максим Лаврентьев
Россия, Сочи
Артур Просвиров
Артур Просвиров
МАИ