- Создавать словарь и получать значения по ключам
- Добавлять, изменять и удалять пары, безопасно читать через
get() - Перебирать словарь через
items()и подсчитывать с его помощью частоты
Вспомни контакты в телефоне: ищешь «Мама» и сразу видишь номер — не нужно знать, каким по счёту идёт этот контакт. Так же устроен обычный словарь: находишь слово, а рядом написано его значение. В Python такие данные хранят в словаре (dict): у каждого значения есть свой ключ.
Создание словаря
Набор пар ключ: значение в фигурных скобках {}. Значение находят не по индексу, а по ключу: student['name'].
student = {'name': 'Leyla', 'age': 14, 'city': 'Ganja'}
print(student)
print(student['name'])
print(len(student))
print(student.get('email'))
print(student.get('email', 'no email'))▸ Ожидаемый результат
{'name': 'Leyla', 'age': 14, 'city': 'Ganja'}
Leyla
3
None
no emailЕсли прочитать ключ, которого нет в словаре, например student['email'], Python выдаст ошибку KeyError. Метод get() ошибки не вызывает: если ключа нет, он вернёт None (особое значение Python, означающее «ничего») или то, что ты передашь вторым аргументом.
Изменение словаря
Добавление новой пары и изменение существующего значения записываются одинаково: student['age'] = 15. Если ключ есть, значение обновится; если нет — появится новая пара. del удаляет пару, а in проверяет, есть ли ключ в словаре.
student = {'name': 'Leyla', 'age': 14}
student['age'] = 15
student['grade'] = 9
print(student)
del student['grade']
print('grade' in student, 'name' in student)▸ Ожидаемый результат
{'name': 'Leyla', 'age': 15, 'grade': 9}
False TrueПеребор словаря
keys() возвращает все ключи, values() — все значения, а items() — пары (ключ, значение). В цикле по items() каждую пару можно сразу распаковать в две переменные — как в уроке о кортежах.
prices = {'bread': 0.8, 'milk': 1.9, 'cheese': 6.5}
for item, price in prices.items():
print(f'{item}: {price:.2f} AZN')
print('Items:', list(prices.keys()))
print(f'Total: {sum(prices.values()):.2f} AZN')▸ Ожидаемый результат
bread: 0.80 AZN milk: 1.90 AZN cheese: 6.50 AZN Items: ['bread', 'milk', 'cheese'] Total: 9.20 AZN
Подсчёт с помощью словаря
Одно из самых полезных применений словаря — подсчёт, сколько раз что-то встречается. Для каждого слова пишем counts.get(word, 0) + 1: когда слово встречается впервые, get возвращает 0, а дальше к старому счёту прибавляется 1.
text = 'the cat and the dog and the bird'
counts = {}
for word in text.split():
counts[word] = counts.get(word, 0) + 1
print(counts)
print('the:', counts['the'])▸ Ожидаемый результат
{'the': 3, 'cat': 1, 'and': 2, 'dog': 1, 'bird': 1}
the: 3Вложенные структуры
Значение в словаре может быть любого типа — например, списком. Так можно сделать электронный журнал: ключ — имя ученика, а значение — список его оценок.
journal = {
'Aysel': [5, 4, 5],
'Murad': [4, 3, 4],
'Nigar': [5, 5, 5],
}
for name, grades in journal.items():
avg = sum(grades) / len(grades)
print(f'{name}: {avg:.1f}')
journal['Murad'].append(5)
print(journal['Murad'])▸ Ожидаемый результат
Aysel: 4.7 Murad: 3.7 Nigar: 5.0 [4, 3, 4, 5]
Словарь особенно удобен для таких задач:
- быстрый поиск значения по имени или коду: контакты, цены товаров;
- подсчёт: частота слов, голосов, оценок;
- группировка: для каждого класса — свой список учеников;
- описание свойств одного объекта: имя, возраст, город.
import json
student = {'name': 'Leyla', 'age': 14, 'city': 'Ganja'}
text = json.dumps(student)
print(text)
back = json.loads(text)
print(back['city'])▸ Ожидаемый результат
{"name": "Leyla", "age": 14, "city": "Ganja"}
GanjaДобавь в словарь prices ключ 'tea' с ценой 3.2 и измени цену 'bread' на 1.0. Затем с помощью .items() выведи каждый товар в виде apple: 1.50, а в конце — Total: и сумму всех цен (с двумя знаками после точки).
prices = {'apple': 1.5, 'bread': 0.8, 'milk': 1.9}
# 1) add tea for 3.2 and change bread to 1.0
# 2) print each item like: apple: 1.50
# 3) print Total: and the sum of all prices▸ Ожидаемый результат
apple: 1.50 bread: 1.00 milk: 1.90 tea: 3.20 Total: 7.60
Класс голосовал за любимое блюдо. Посчитай голоса за каждое блюдо с помощью словаря и .get(), затем выведи блюда в алфавитном порядке в виде dolma: 2. В конце выведи Winner: и название блюда, набравшего больше всего голосов.
votes = ['plov', 'dolma', 'plov', 'kebab', 'dolma', 'plov']
counts = {}
# 1) count the votes for each dish
# 2) print the dishes in alphabetical order like: dolma: 2
# 3) print Winner: and the dish with the most votes▸ Ожидаемый результат
dolma: 2 kebab: 1 plov: 3 Winner: plov
Главное
- Словарь — это пары
ключ: значениев{}; значение находят по ключу. d[key] = valueдобавляет пару или обновляет значение,del d[key]удаляет пару.get()не падает на отсутствующем ключе, а возвращаетNoneили заданное значение по умолчанию.- Цикл по
items()на каждом шаге даёт ключ и значение вместе. - Ключи должны быть уникальными и неизменяемого типа.
Проверь себя
Вопросов: 10. Каждый правильный ответ приносит XP.
d = {'a': 1, 'b': 2}, чему равно d['b']?