Пропустить до содержимого

Как итерироваться по словарю в Python?

CodeMDD.io

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

Крепкое знание перебора словаря поможет вам написать лучший и более надежный код. В процессе изучения перебора словаря вы напишете несколько примеров, которые помогут вам разобраться в этой теме.

Начало работы с Python словарями

Перед тем, как углубиться в перебор словарей, давайте рассмотрим базовые понятия словарей в Python.

Словарь - это неупорядоченная коллекция пар “ключ-значение”. Ключи в словаре должны быть уникальными, а значения могут быть любого типа данных. Ключи в словаре - это неизменяемые объекты, такие как строки или числа, в то время как значения могут быть изменяемыми объектами, например списками или другими словарями.

person = {
"name": "John",
"age": 30,
"city": "New York"
}

Понимание перебора словаря в Python

Перебор словаря в Python может быть осуществлен несколькими способами, включая прямой перебор словаря, перебор элементов словаря, перебор ключей словаря и перебор значений словаря.

Прямой перебор словаря

Простейший способ перебрать словарь - это прямой перебор его элементов. Для этого вы можете использовать цикл for.

person = {"name": "John", "age": 30, "city": "New York"}
for key in person:
print(key, person[key])

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

Перебор элементов словаря: метод .items()

Более удобным способом перебора словаря является использование метода .items(), который возвращает пары ключ-значение словаря. Вы можете использовать этот метод для получения доступа как к ключу, так и к значению каждого элемента словаря.

person = {"name": "John", "age": 30, "city": "New York"}
for key, value in person.items():
print(key, value)

Перебор ключей словаря: метод .keys()

Если вам нужно перебрать только ключи словаря, вы можете использовать метод .keys(), который возвращает представление ключей словаря в виде списка.

person = {"name": "John", "age": 30, "city": "New York"}
for key in person.keys():
print(key)

Перебор значений словаря: метод .values()

Если вам нужно перебрать только значения словаря, вы можете использовать метод .values(), который возвращает представление значений словаря в виде списка.

person = {"name": "John", "age": 30, "city": "New York"}
for value in person.values():
print(value)

Изменение значений словаря во время перебора

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

person = {"name": "John", "age": 30, "city": "New York"}
for key, value in person.items():
if key == "name":
person[key] = "Bob"
elif key == "age":
person.pop(key)
elif key == "city":
person["country"] = "USA"
print(person)

Безопасное удаление элементов из словаря во время перебора

Если вы хотите безопасно удалить элемент из словаря во время его перебора, вы можете использовать метод .copy() для создания копии словаря и перебирать эту копию.

person = {"name": "John", "age": 30, "city": "New York"}
for key in person.copy().keys():
if key == "age":
person.pop(key)
print(person)

Примеры цикла for для перебора словарей

Давайте рассмотрим несколько примеров цикла for для перебора словарей в Python.

Фильтрация элементов по их значению

person = {"name": "John", "age": 30, "city": "New York"}
for key, value in person.items():
if value == "John":
print(key, value)

Выполнение вычислений с ключами и значениями

grades = {"Alice": 90, "Bob": 80, "Charlie": 95}
for key, value in grades.items():
grades[key] += 5
print(grades)

Обмен ключей и значений во время перебора

person = {"name": "John", "age": 30, "city": "New York"}
new_person = {}
for key, value in person.items():
new_person[value] = key
print(new_person)

Примеры генераторов списков для перебора словарей

Генераторы списков - это сокращенный и элегантный способ создания новых списков на основе существующих. Давайте рассмотрим несколько примеров генераторов списков для перебора словарей в Python.

Фильтрация элементов по их значению

person = {"name": "John", "age": 30, "city": "New York"}
filtered_person = {key: value for key, value in person.items() if value == "John"}
print(filtered_person)

Обмен ключей и значений во время перебора

person = {"name": "John", "age": 30, "city": "New York"}
swapped_person = {value: key for key, value in person.items()}
print(swapped_person)

Обход словаря в отсортированном и обратном порядке

Иногда вам может понадобиться перебрать словарь в определенном порядке, например, в алфавитном порядке его ключей или значений. Для этого вы можете использовать функции сортировки и обращения.

Перебор отсортированных ключей

person = {"name": "John", "age": 30, "city": "New York"}
for key in sorted(person.keys()):
print(key)

Перебор отсортированных значений

person = {"name": "John", "age": 30, "city": "New York"}
for value in sorted(person.values()):
print(value)

Сортировка словаря с использованием генератора

person = {"name": "John", "age": 30, "city": "New York"}
sorted_person = {key: value for key, value in sorted(person.items())}
print(sorted_person)

Перебор словаря в обратном отсортированном порядке

person = {"name": "John", "age": 30, "city": "New York"}
for key in sorted(person.keys(), reverse=True):
print(key)

Обратный обход словаря

person = {"name": "John", "age": 30, "city": "New York"}
for key in reversed(person):
print(key)

Перебор словаря разрушительно с использованием .popitem()

.popitem() - это метод словаря, который удаляет и возвращает последний элемент словаря в виде пары “ключ-значение”. Вы можете перебирать словарь разрушительно, используя этот метод.

person = {"name": "John", "age": 30, "city": "New York"}
while person:
key, value = person.popitem()
print(key, value)

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

Python предлагает несколько встроенных функций, которые позволяют неявно перебирать словари. Давайте рассмотрим две такие функции: map(), filter().

Применение преобразования к элементам словаря: map()

Функция map() позволяет применить заданную функцию ко всем элементам словаря и получить новый словарь с преобразованными значениями.

grades = {"Alice": 90, "Bob": 80, "Charlie": 95}
rounded_grades = {key: value https://codemdd.io/ 10 * 10 for key, value in map(lambda item: (item[0], round(item[1], -1)), grades.items())}
print(rounded_grades)

Фильтрация элементов словаря: filter()

Функция filter() позволяет фильтровать элементы словаря в соответствии с заданным условием.

grades = {"Alice": 90, "Bob": 80, "Charlie": 95}
passed_grades = {key: value for key, value in filter(lambda item: item[1] >= 70, grades.items())}
print(passed_grades)

Обход нескольких словарей как одного

При работе с несколькими словарями вам может потребоваться перебрать их как один. В Python вы можете это сделать с помощью функций ChainMap и chain().

Перебор нескольких словарей с помощью ChainMap

Функция ChainMap объединяет несколько словарей в один логический словарь. При этом значения возвращаются из первого словаря, в котором находится искомый ключ.

from collections import ChainMap
person1 = {"name": "John", "age": 30}
person2 = {"city": "New York", "country": "USA"}
person = ChainMap(person1, person2)
for key, value in person.items():
print(key, value)

Перебор цепочки словарей с помощью chain()

Функция chain() объединяет несколько итерируемых объектов, таких как списки или словари, в одну последовательность.

from itertools import chain
person1 = {"name": "John", "age": 30}
person2 = {"city": "New York", "country": "USA"}
for key, value in chain(person1.items(), person2.items()):
print(key, value)

Циклическое объединение словарей: оператор распаковки **

Оператор распаковки ** позволяет объединять несколько словарей в один.

person1 = {"name": "John", "age": 30}
person2 = {"city": "New York", "country": "USA"}
merged_person = {**person1, **person2}
print(merged_person)

Вывод

Перебор словарей - это важный навык, который поможет вам эффективно работать с данными в Python. В этом руководстве вы изучили различные способы перебора словаря, включая прямой перебор, использование методов .items(), .keys() и .values(). Вы также изучили, как изменять значения словаря во время перебора, безопасно удалять элементы и использовать генераторы списков для перебора словарей. Надеюсь, все эти примеры помогут вам лучше понять и применять перебор словарей при решении различных задач программирования на Python.