Как пройти по словарю в Python (по ключам и значениям)?
Есть словарь, нужно перебрать его в цикле. Когда пишу for x in my_dict, получаю только ключи, а мне нужны и ключ, и значение вместе. Как итерироваться по словарю правильно?
2 ответа
Простой for x in my_dict действительно даёт только ключи — это поведение по умолчанию. Чтобы получить пары «ключ-значение», используйте .items():
prices = {'хлеб': 40, 'молоко': 70, 'яйца': 90}
for name, price in prices.items():
print(f'{name}: {price} руб')
Здесь .items() на каждой итерации отдаёт кортеж (ключ, значение), а Python сам распаковывает его в две переменные name и price.
Если нужны только значения — .values():
total = sum(prices.values()) # 200
Если только ключи (явно) — .keys(), хотя обычно достаточно просто for k in prices.
Частые ошибки:
- Писать
for name, price in prices:без.items()— будетValueError, потому что итерация по словарю даёт по одному ключу, а вы пытаетесь распаковать его в две переменные. - Менять размер словаря во время цикла (добавлять/удалять ключи) — выпадет
RuntimeError. Если нужно удалять, итерируйтесь по копии:for k in list(prices):.
С Python 3.7 порядок обхода совпадает с порядком добавления ключей, так что перебор предсказуем.
Если нужен ещё и порядковый номер пары, добавьте enumerate:
for i, (name, price) in enumerate(prices.items(), start=1):
print(i, name, price)
Обратите внимание на скобки вокруг (name, price) — enumerate отдаёт (индекс, элемент), а элемент сам кортеж из .items(), поэтому его распаковываем отдельной парой в скобках. Без них Python запутается в количестве переменных.