Коллекции данных, продолжение
Словарь(dict) - это контейнер для пары ключ - значение.
Значением может быть любой объект, а вот ключом нет.
Ключи - только строки:
a = dict(one=1, two=2, three=3)
При другом варианте, можно в ключах задавать и другие структуры данных:
a = {'one': 1, 'two': 2, 'three': 3}
b = {(1,2,3): 1, 'two': 2, 'three': 3}
задание пар ключ-значение:
с = dict([('one', 1), ('two', 2), ('three', 3)])
d = dict({'one': 1, 'two': 2, 'three': 3})
d = dict({'one': 1, 'two': 2}, three=3)
По словарю можно интерироваться:
a = dict(one=1, two=2, three=3)
for key, value in a.items():
print(key, value) # one 1 two 2 three 3
for x in a.items():
print(x) # ('one', 1) ('two', 2) ('three', 3)
Можно создавать словарь из других структур:
Создаем словарь соответсвия числа от 0 до 9 включительно и степени двойки с этим показателем.
f = {x : 2 ** x for x in range(10)}
print(f)
# {0: 1, 1: 2, 2: 4, 3: 8, 4: 16, 5: 32, 6: 64, 7:128, 8: 256, 9: 512}
Можно создавать словарь из другого словаря
f = {x : 2 ** x for x in range(10)}
g = {k: v for k, v in f.items() if k % 2 == 1}
print(g)
# {1: 2, 3: 8, 5: 32, 7:128, 9: 512}
можно перевернуть словарь
f = {x : 2 ** x for x in range(10)}
g = {v: k for k, v in f.items()} # значение и ключ поменялись местами
print(g)
длина словаря - функция len(число ключей в нём)
print(len(f), len(g))
можно проверять, что какой то ключ входит или не входит в словарь
print(1 in f, 10 in f, 2 not in f)
можно обращаться по индексам(ключам) словаря
print(f[3])
если какого то ключа нет в словаре то получим ошибку KeyError
чтобы избегать таких ситуаций, когда мы хотим получить значение по какому то ключу но не уверены что этот ключ есть в словаре мы можем использовать метод get, где прописываем ключ который хотим получить и прописываем значение которое вернется в случае если этого ключа не окажется.
print(f.get(10, -1))
Словарь является изменяемой структурой данных, поэтому его элементы можно менять. Мы можем обратиться по ключу и поменять его значение.
f[3] = -1