Гид по технологиям

Как перебирать словарь в Python

5 min read Python Обновлено 13 Apr 2026
Как перебирать словарь в Python
Как перебирать словарь в Python

Рука, держащая книгу по Python

Введение

Умение перебирать словарь в Python полезно для чтения, изменения и вывода данных. Для новичков это может быть немного запутанным, особенно если словарь вложенный или требуется специфичный порядок. Ниже — практическое руководство с примерами, подсказками и шаблонами.

Перебор ключей и значений

Словарь в Python содержит пары ключ–значение. Чтобы перебрать ключи, можно использовать метод keys():

myDict = {"A" : 2, "B" : 5, "C" : 6}

for i in myDict.keys():
    print("Key" + " " + i)

# Вывод:
# Key A
# Key B
# Key C

Однако ключи можно получать напрямую при итерации по словарю — for по словарю возвращает ключи по умолчанию:

for key in myDict:
    print("Key" + " " + key)

# Вывод:
# Key A
# Key B
# Key C

Чтобы получить только значения, используйте values():

for i in myDict.values():
    print(i)

# Вывод:
# 2
# 5
# 6

Или обращайтесь к значениям по ключам:

for key in myDict:
    print(myDict[key])

# Вывод:
# 2
# 5
# 6

Можно одновременно получать и ключи, и значения двумя способами. Первый — получать значение через обращение по ключу внутри цикла:

for key in myDict:
    print(key, "|", myDict[key])

# Вывод:
# A | 2
# B | 5
# C | 6

Второй — использовать .items(), который возвращает пары (ключ, значение):

for key, value in myDict.items():
    print(key, "|", value)

# Вывод:
# A | 2
# B | 5
# C | 6

Иногда нужен обратный порядок — примените sorted() с reverse=True:

for key, value in sorted(myDict.items(), reverse=True):
    print(key, "|", value)

# Вывод:
# C | 6
# B | 5
# A | 2

Преобразование словаря в список

Перевести словарь в список проще простого. Можно получить список кортежей (ключ, значение):

myDict = {"A" : "MUO", "B" : "Google", "C" : "Python"}
myList = []
for key, value in myDict.items():
    myList.append((key, value))
print(myList)

# Вывод: [('A', 'MUO'), ('B', 'Google'), ('C', 'Python')]

Или вложенный список пар:

myList = []
for key, value in myDict.items():
    myList.append([key, value])
print(myList)

# Вывод: [['A', 'MUO'], ['B', 'Google'], ['C', 'Python']]

Если нужно «сплющить» словарь в одноуровневый список:

myList = []
for key, value in myDict.items():
    myList += key, value
print(myList)

# Вывод: ['A', 'MUO', 'B', 'Google', 'C', 'Python']

Аналогичные преобразования можно выполнить через списковые включения (list comprehensions) и через itertools.

Суммирование значений словаря

Чтобы сложить все числовые значения словаря в цикле:

myDict = {"A":6, "B":7, "C":9}
g = 0  # инициализация переменной для накопления
for i in myDict.values():
    g += i  # добавляем каждое значение
print(g)

# Вывод: 22

Но проще и чище — использовать встроенную функцию sum(), которая уже итерирует коллекцию:

summedValues = sum(myDict.values())
print(summedValues)

# Вывод: 22

Перебор вложенного словаря

Вложенные словари обрабатываются так же, как обычные, но нередко требуется вложенная итерация:

myDict = {"A" : [1, 2, 3], "B" : [4, 5, 6]}

for i in myDict.keys():
    print(myDict[i])

# Вывод:
# [1, 2, 3]
# [4, 5, 6]

Если перебрать items(), получите кортежи с подсписками:

for i in myDict.items():
    print(i)

# Вывод:
# ('A', [1, 2, 3])
# ('B', [4, 5, 6])

Сложный пример — словарь, значения которого сами по себе словари:

complexArray = {
    "Detail" : {
        "Name" : "Idowu",
        "Logs" : 20,
        "isAdmin" : True
    },
    "Activities" : {
        "Inputs" : 14,
        "Input Type" : "Video"
    }
}

for value in complexArray.values():
    print(value)

# Вывод:
# {'Name': 'Idowu', 'Logs': 20, 'isAdmin': True}
# {'Inputs': 14, 'Input Type': 'Video'}

Чтобы получить только значения из дочернего словаря “Detail”:

for value in complexArray["Detail"].values():
    print(value)

# Вывод:
# Idowu
# 20
# True

Вложенные циклы позволяют пройти по всем дочерним значениям сразу:

for value in complexArray.values():
    for i in value.values():  # получаем значения в дочерних словарях
        print(i)

# Вывод:
# Idowu
# 20
# True
# 14
# Video

Можно также использовать рекурсивные функции для произвольной глубины вложенности.

Изменение элементов словаря при итерации

Словарь изменяем, поэтому его содержимое можно менять в процессе обработки. Например, переставить местами ключи и значения:

myDict = {"A" : "MUO", "B" : "Google", "C" : "Python"}
swappedDict = {}
for key, value in myDict.items():
    swappedDict[value] = key
print(swappedDict)

# Вывод: {'MUO': 'A', 'Google': 'B', 'Python': 'C'}

То же самое удобно сделать в виде словарного включения:

swappedDict = {value: key for key, value in myDict.items()}
print(swappedDict)

# Вывод: {'MUO': 'A', 'Google': 'B', 'Python': 'C'}

Будьте осторожны при удалении элементов во время итерации: изменять структуру словаря, по которому вы сами же итерируетесь, может привести к неожиданным результатам. Решение — итерировать по копии списка ключей list(myDict.keys()). Пример удаления и последующей вставки:

myDict = {"A" : "MUO", "B" : "Google", "C" : "Python", "C" : "Python"}
for key in list(myDict.keys()):
    if key == 'C':
        del myDict[key]
        myDict[key] = "Python"
print(myDict)

# Вывод: {'A': 'MUO', 'B': 'Google', 'C': 'Python'}

Альтернативные подходы и полезные функции

  • dict.items(), dict.keys(), dict.values() — стандартный набор.
  • Словарные включения (dict comprehensions) дают компактный код для преобразований.
  • Функции sum(), any(), all(), max(), min() работают с результатами dict.values() или dict.items().
  • itertools.chain и map полезны для сложных трансформаций и «сплющивания» данных.
  • pandas.Series или DataFrame удобны при обработке больших табличных наборов данных.

Когда перебор словаря может не сработать

  • Нельзя надёжно модифицировать словарь (добавлять/удалять ключи) во время итерации по самим ключам без предварительной копии — это ведёт к ошибкам или пропуску элементов.
  • До Python 3.7 порядок ключей не гарантирован; полагаться на порядок допустимо, начиная с 3.7 (имплементация CPython сохраняет порядок вставки).
  • При большой глубине вложенности рекурсивная итерация может превысить лимит стека — используйте явный стек или итеративный подход.

Шпаргалка: быстрые приёмы

  • Все ключи: for k in d:
  • Все значения: for v in d.values():
  • Ключи+значения: for k, v in d.items():
  • Сумма значений: sum(d.values())
  • Инвертировать словарь: {v: k for k, v in d.items()}
  • Удаление при итерации: for k in list(d.keys()): …

Практическая методика (шаги)

  1. Решите, нужны ли вам ключи, значения или пары.
  2. Если будут удаления — создайте list(d.keys()) и итерируйте по ней.
  3. Для упорядочивания примените sorted() к items() или keys().
  4. Для вложенных структур используйте вложенные циклы или рекурсию.
  5. После изменений проверьте инварианты словаря (уникальность ключей, типы значений).

Проверки и критерии приёмки

  • Все ожидаемые ключи присутствуют после преобразований.
  • Типы значений соответствуют спецификации (напр., числа там, где ожидаются числа).
  • Операция не теряет элементы и не вызывает исключений при корректных входных данных.
  • Тесты покрывают краевые случаи: пустой словарь, единственный элемент, дубликаты по значению.

Роли и чек-листы

Для новичка:

  • Понимаю, что for по словарю возвращает ключи.
  • Использую .items() для пар.
  • Не удаляю элементы без list(keys()).

Для разработчика:

  • Применяю comprehensions там, где это упрощает код.
  • Профилирую операции при больших словарях (память и время).
  • Покрываю unit-тестами преобразования словарей.

Факт-бокс

  • Время перебора n элементов: O(n).
  • dict.items(), dict.keys(), dict.values() возвращают представления (view), не копии, поэтому их можно эффективно использовать для чтения.

Глоссарий (одна строка)

  • Словарь (dict): структура данных с быстрым доступом по ключу.
  • items(): возвращает пары (ключ, значение).
  • values(): возвращает коллекцию значений.
  • keys(): возвращает коллекцию ключей.

Часто задаваемые вопросы

Как безопасно удалить элементы при переборе?

Итерируйте по копии списка ключей: for k in list(d.keys()): if условие: del d[k].

Можно ли полагаться на порядок ключей?

В CPython 3.7+ порядок вставки гарантируется, но лучше явно сортировать, если нужен определённый порядок.

Краткое резюме

Перебор словаря в Python — базовый навык: используйте for по словарю для ключей, .values() для значений, .items() для пар. Для изменений при итерации копируйте ключи. Для компактных преобразований применяйте словарные включения. Наконец, тестируйте трансформации и учитывайте вложенность.

Важно: при работе с большими или глубоко вложенными структурами думайте о памяти и ограничениях рекурсии.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Ghost: простой блог на Node.js
Блог

Ghost: простой блог на Node.js

Обновление Debian 11 до Debian 12
Linux

Обновление Debian 11 до Debian 12

Восстановление доступа к аккаунту Google
Безопасность

Восстановление доступа к аккаунту Google

Самоподписанный SSL в Linux — создание и настройка
Безопасность

Самоподписанный SSL в Linux — создание и настройка

Как сделать Minecraft красивее с OptiFine
Minecraft

Как сделать Minecraft красивее с OptiFine

Как найти литературного агента быстро
Издательство

Как найти литературного агента быстро