← Все вопросы

Как пройти по словарю в Python (по ключам и значениям)?

Задан 24 месяца назад289 просмотров2 ответа
10

Есть словарь, нужно перебрать его в цикле. Когда пишу for x in my_dict, получаю только ключи, а мне нужны и ключ, и значение вместе. Как итерироваться по словарю правильно?

2 ответа

14
✓ Принятый ответ — помог автору

Простой 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.

Частые ошибки:

  1. Писать for name, price in prices: без .items() — будет ValueError, потому что итерация по словарю даёт по одному ключу, а вы пытаетесь распаковать его в две переменные.
  2. Менять размер словаря во время цикла (добавлять/удалять ключи) — выпадет RuntimeError. Если нужно удалять, итерируйтесь по копии: for k in list(prices):.

С Python 3.7 порядок обхода совпадает с порядком добавления ключей, так что перебор предсказуем.

4

Если нужен ещё и порядковый номер пары, добавьте enumerate:

for i, (name, price) in enumerate(prices.items(), start=1):
    print(i, name, price)

Обратите внимание на скобки вокруг (name, price)enumerate отдаёт (индекс, элемент), а элемент сам кортеж из .items(), поэтому его распаковываем отдельной парой в скобках. Без них Python запутается в количестве переменных.

Ваш ответ

Войдите, чтобы ответить на вопрос.