2.9. Словники¶
Словник — це відображення ключів на значення. Кожен ключ шукається безпосередньо; словник запам’ятовує, яке значення було востаннє пов’язано з цим ключем.
2.9.1. Створення словників¶
Використовуйте фігурні дужки з парами key: value або конструктор dict:
empty = {}
person = {"name": "OpenMV", "id": 42}
counts = dict(a=1, b=2, c=3) # keyword form
pairs = dict([("x", 1), ("y", 2)]) # from a list of pairs
Значення можуть бути будь-яких типів — рядки, числа, списки, навіть інші словники:
config = {
"name": "OpenMV",
"id": 42,
"width": 320,
"tags": ["red", "round"],
}
Кожен ключ у словнику відповідає рівно одному значенню.¶
2.9.2. Доступ та перевірка наявності¶
Індексування за допомогою [] повертає значення за ключем. Відсутній ключ викидає KeyError:
>>> person = {"name": "OpenMV", "id": 42}
>>> person["name"]
'OpenMV'
>>> person["missing"]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'missing'
Для пошуку без виключень використовуйте dict.get(). Він повертає None для відсутнього ключа або значення, передане як другий аргумент:
>>> person.get("name")
'OpenMV'
>>> person.get("missing") # returns None
>>> person.get("missing", "n/a")
'n/a'
Ключове слово in перевіряє наявність ключа — не значення:
>>> "name" in person
True
>>> "OpenMV" in person
False
2.9.3. Додавання, оновлення та видалення¶
Присвоєння d[key] додає запис, якщо ключ новий, і перезаписує його, якщо він вже існує:
>>> person["seen"] = 1
>>> person["seen"] = 2 # overwrites
>>> person
{'name': 'OpenMV', 'id': 42, 'seen': 2}
Видалення має кілька форм:
del d[key]— видаляє запис; викидаєKeyError, якщо ключ відсутній.dict.pop()— видаляє та повертає значення; необов’язковий стандартний аргумент дозволяє уникнути виключення.dict.clear()— видаляє всі записи.
dict.update() об’єднує інший словник (або список пар (key, value)) з поточним, перезаписуючи збігаючіся ключі:
>>> person.update({"id": 100, "owner": "alice"})
>>> person
{'name': 'OpenMV', 'id': 100, 'seen': 2, 'owner': 'alice'}
2.9.4. Ітерація¶
Пряма ітерація по словнику повертає його ключі в порядку вставки:
for k in person:
print(k)
Три представлення надають явний доступ:
dict.keys()— ключі (те саме, що ітерація по словнику).dict.values()— значення.dict.items()— кортежі(key, value), ідеальні для розпаковування в циклі.
for key, value in person.items():
print(key, "=", value)
2.9.5. Що може бути ключем¶
Ключі словника мають бути хешованими — їхнє значення не може змінюватися протягом їхнього існування. Поширені хешовані типи:
Змінювані типи, такі як list, dict та bytearray, не можуть бути ключами; використання таких типів викидає TypeError. Кортежі незмінних значень є стандартним способом використовувати складені ідентифікатори (наприклад, координати в 2D-сітці) як ключі словника:
>>> grid = {}
>>> grid[(0, 0)] = "start"
>>> grid[(5, 7)] = "end"
2.9.6. Довжина¶
len() повертає кількість записів:
>>> len(person)
4