В Python имеется еще один составной тип данных, называемый словарем, который похож на список. Словарь (dict) — неупорядоченная коллекция произвольных объектов с доступом по ключу. Словарь более известен как ассоциативный массив. Словарь состоит из набора пар "Ключ-Значение". И в отличии от списка, где к каждому элементу можно обратиться по его порядковому номеру(индексу), в словаре обращение к элементу происходит по ключу.
Вы можете определить словарь, включив в фигурные скобки список пар "Ключ-значение", разделенных запятыми. Двоеточие (:) отделяет каждый ключ от связанного с ним значения:
d = {
ключ 1: значение,
ключ 2: значение,
....
ключ N: значение
}
Пример: мы можем связать (ассоциировать) названия футбольной команды с городом, где она основана:
teams = {
'Arsenal': 'London',
'Bayern': 'Munich',
'PSG': 'Paris',
}
Для получения значения внутри пары вы должны обратиться по ключу dict[key]
>>> teams['PSG']
'Paris'
>>> teams['Arsenal']
'London'
Если попытаетесь обратиться к ключу, которого нет, получится исключение типа KeyError
>>> teams['Chelsea']
Traceback (most recent call last):
File "", line 1, in
teams['Chelsea']
KeyError: 'Chelsea'
Чтобы добавить новое значение в словарь, нужно обратиться по несуществующему ключу и присвоить в него значение
>>> teams
{'Arsenal': 'London', 'Bayern': 'Munich', 'PSG': 'Paris'}
>>> teams['Sporting'] = 'Lisbon'
>>> teams
{'Arsenal': 'London', 'Bayern': 'Munich', 'PSG': 'Paris', 'Sporting': 'Lisbon'}
Чтобы изменить значение существующего ключа, нужно обратиться по этому ключу и присвоить новое значение
>>> teams
{'Arsenal': 'London', 'Bayern': 'Munich', 'PSG': 'Paris', 'Sporting': 'Lisbon'}
>>> teams['Arsenal']='Лондон'
>>> teams
{'Arsenal': 'Лондон', 'Bayern': 'Munich', 'PSG': 'Paris', 'Sporting': 'Lisbon'}
Чтобы удалить элемент словаря, нужно воспользоваться командой del
>>> teams
{'Arsenal': 'Лондон', 'Bayern': 'Munich', 'PSG': 'Paris', 'Sporting': 'Lisbon'}
>>> del teams['Sporting']
>>> teams
{'Arsenal': 'Лондон', 'Bayern': 'Munich', 'PSG': 'Paris'}
Чтобы найти длину словаря(количество пар "ключ-значение"), нужно воспользоваться функцией len()
>>> teams
{'Arsenal': 'Лондон', 'Bayern': 'Munich', 'PSG': 'Paris'}
>>> len(teams)
3
>>> len({})
0
>>> len({'a':[1,2,3]})
1
Для этого нужно воспользоваться командой in. Обратите внимание, что поиск происходит только среди ключей словаря
>>> teams
{'Arsenal': 'Лондон', 'Bayern': 'Munich', 'PSG': 'Paris'}
>>> 'Bayern' in teams
True
>>> 'Munich' in teams
False
Полностью очищает словарь
>>> teams
{'Arsenal': 'Лондон', 'Bayern': 'Munich', 'PSG': 'Paris'}
>>> teams.clear()
>>> teams
{}
Метод, который принимает обязательный параметр - значение ключа. В случае, если данный ключ имеется в словаре, возвращается его значение. В противном случае вернется None, либо значение default (если оно было передено)
>>> teams
{'Arsenal': 'Лондон', 'Bayern': 'Munich', 'PSG': 'Paris'}
>>> teams.get('PSG')
'Paris'
>>> teams.get('Porto')
>>> print(teams.get('Porto'))
None
>>> teams.get('Porto','Not exist')
'Not exist'
>>> teams.get('Porto',999)
999
Метод, который принимает обязательный параметр - значение ключа. Возвращает значение ключа, но если его нет создает ключ с значением default (по умолчанию None).
>>> teams
{'Arsenal': 'Лондон', 'Bayern': 'Munich', 'PSG': 'Paris'}
>>> teams.setdefault('PSG')
'Paris'
>>> teams
{'Arsenal': 'Лондон', 'Bayern': 'Munich', 'PSG': 'Paris'}
>>> teams.setdefault('Porto')
>>> teams
{'Arsenal': 'Лондон', 'Bayern': 'Munich', 'PSG': 'Paris', 'Porto': None}
>>> teams.setdefault('Benfika','Lisbon')
'Lisbon'
>>> teams
{'Arsenal': 'Лондон', 'Bayern': 'Munich', 'PSG': 'Paris', 'Porto': None, 'Benfika': 'Lisbon'}
Метод, который удаляет ключ и возвращает значение. Если ключа нет, возвращает default (по умолчанию бросает исключение).
>>> teams
{'Arsenal': 'Лондон', 'Bayern': 'Munich', 'PSG': 'Paris', 'Porto': None, 'Benfika': 'Lisbon'}
>>> print(teams.pop('Porto'))
None
>>> teams
{'Arsenal': 'Лондон', 'Bayern': 'Munich', 'PSG': 'Paris', 'Benfika': 'Lisbon'}
>>> teams.pop('Benfika','Hello')
'Lisbon'
>>> teams
{'Arsenal': 'Лондон', 'Bayern': 'Munich', 'PSG': 'Paris'}
>>> teams.pop("Chelsea")
Traceback (most recent call last):
File "", line 1, in
teams.pop("Chelsea")
KeyError: 'Chelsea'
>>> teams.pop("Chelsea","Hello")
'Hello'
Метод, который возвращает коллекцию всех ключей в словаре
>>> teams
{'Arsenal': 'Лондон', 'Bayern': 'Munich', 'PSG': 'Paris'}
>>> teams.keys()
dict_keys(['Arsenal', 'Bayern', 'PSG'])
Метод, который возвращает коллекцию всех значений в словаре
>>> teams
{'Arsenal': 'Лондон', 'Bayern': 'Munich', 'PSG': 'Paris'}
>>> teams.values()
dict_values(['Лондон', 'Munich', 'Paris'])
Метод, который возвращает коллекцию всех пар "ключ-значение"
>>> teams
{'Arsenal': 'Лондон', 'Bayern': 'Munich', 'PSG': 'Paris'}
>>> teams.items()
dict_items([('Arsenal', 'Лондон'), ('Bayern', 'Munich'), ('PSG', 'Paris')])
При обходе элементов в переменной i по умолчанию будут сохранятся значения ключей
>>> teams
{'Arsenal': 'Лондон', 'Bayern': 'Munich', 'PSG': 'Paris'}
>>> for i in teams:
print(i)
Arsenal
Bayern
PSG
Но, зная ключ, можно обратиться к значению этого ключа
>>> for i in teams:
print(i, teams[i])
Arsenal Лондон
Bayern Munich
PSG Paris
Обойти только значения словаря можно при использовании метода .values()
>>> for i in teams.values():
print(i)
Лондон
Munich
Paris
При помощи метода .items() можно обходить элементы, получая сразу и ключ и значение
>>> for item in teams.items():
key, value = item[0], item[1]
print(key, value)
Arsenal Лондон
Bayern Munich
PSG Paris
>>> for key, value in teams.items():
print(key, value)
Arsenal Лондон
Bayern Munich
PSG Paris