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

Как использовать итерирование в Python для словарей?

CodeMDD.io

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

__автор: Леоданис Позо Рамос __, 28 августа 2023

Введение

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

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

Шаг 1: Определение словаря

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

В данном примере определяется словарь person, содержащий информацию о человеке, включая имя, возраст и город.

Шаг 2: Итерация по словарю

for key in person:
print(key)

Этот код итерирует по ключам словаря person и выводит их на экран.

Шаг 3: Доступ к значениям словаря

for key in person:
value = person[key]
print(value)

Для каждого ключа в словаре person мы получаем значение и выводим его на экран.

Шаг 4: Итерация по парам (ключ, значение)

for key, value in person.items():
print(key, value)

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

Шаг 5: Получение только ключей словаря

for key in person.keys():
print(key)

Этот код использовует метод .keys(), который возвращает все ключи словаря person. Мы итерируем по этим ключам и выводим их на экран.

Шаг 6: Получение только значений словаря

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

В данном примере мы используем метод .values(), который возвращает все значения словаря person. Мы итерируем по этим значениям и выводим их на экран.

Изменение значений словаря во время итерации

Шаг 1: Изменение значений словаря

for key in person:
person[key] = 'Unknown'
print(person)

В этом примере мы изменяем значения словаря person, присваивая им новое значение ‘Unknown’ с помощью оператора присваивания =. Затем мы выводим измененный словарь на экран.

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

Шаг 1: Удаление элементов из словаря

to_remove = []
for key, value in person.items():
if value == 'Unknown':
to_remove.append(key)
for key in to_remove:
del person[key]
print(person)

В этом примере мы создаем список to_remove, в котором будем хранить ключи, которые хотим удалить из словаря person. Затем мы итерируем по парам (ключ, значение) и проверяем, является ли значение ‘Unknown’. Если это так, мы добавляем ключ в список to_remove. Затем мы итерируем по списку to_remove и удаляем все найденные ключи из словаря person. Наконец, мы выводим измененный словарь на экран.

Итерация через словари: примеры с использованием цикла for

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

for key, value in person.items():
if value < 30:
print(key)

В данном примере мы используем условие value < 30, чтобы отфильтровать элементы словаря person. Мы выводим ключи, соответствующие значениям, меньшим 30.

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

total_age = 0
for key, value in person.items():
if key == 'age':
total_age += value
print(total_age)

В этом примере мы используем условие key == 'age', чтобы найти ключ 'age' в словаре person. Затем мы складываем все значения, соответствующие этому ключу, и выводим результат.

Шаг 3: Обмен ключей и значений при помощи итерации

swapped = {}
for key, value in person.items():
swapped[value] = key
print(swapped)

В данном примере мы создаем новый словарь swapped, в котором ключи и значения переключены местами. Мы итерируем по парам (ключ, значение) и добавляем элементы в новый словарь, используя значение в качестве ключа и ключ в качестве значения. Результат выводится на экран.

Итерация через словари: примеры с использованием генераторов

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

filtered = {key: value for key, value in person.items() if value < 30}
print(filtered)

В этом примере мы используем генератор словаря для фильтрации элементов словаря person. Мы создаем словарь filtered, включающий только те пары (ключ, значение), для которых значение меньше 30.

Шаг 2: Обмен ключей и значений при помощи итерации: повторное использование

swapped = {value: key for key, value in person.items()}
print(swapped)

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

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

Шаг 1: Обход отсортированных ключей

for key in sorted(person.keys()):
print(key)

В этом примере мы использовали функцию sorted(), чтобы получить отсортированный список ключей словаря person. Затем мы итерируем по этому списку и выводим каждый ключ на экран.

Шаг 2: Обход отсортированных значений

for value in sorted(person.values()):
print(value)

В данном примере мы использовали функцию sorted(), чтобы получить отсортированный список значений словаря person. Затем мы итерируем по этому списку и выводим каждое значение на экран.

Шаг 3: Сортировка словаря при помощи генератора

sorted_dict = {key: value for key, value in sorted(person.items())}
print(sorted_dict)

В этом примере мы использовали генератор словаря для создания нового словаря sorted_dict, в котором ключи отсортированы в алфавитном порядке. Мы использовали функцию sorted(), чтобы получить отсортированный список пар (ключ, значение), а затем создали словарь из этого списка.

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

for key in sorted(person.keys(), reverse=True):
print(key)

В этом примере мы использовали функцию sorted() с аргументом reverse=True, чтобы получить отсортированный список ключей словаря person в обратном порядке. Затем мы итерируем по этому списку и выводим каждый ключ на экран.

Шаг 5: Обход словаря в обратном порядке

for key in reversed(person.keys()):
print(key)

В данном примере мы использовали функцию reversed(), чтобы получить обратный список ключей словаря person. Затем мы итерируем по этому списку и выводим каждый ключ на экран.

Итерация по словарю при помощи метода .popitem()

Шаг 1: Итерация по словарю при помощи .popitem()

while person:
key, value = person.popitem()
print(key, value)

В этом примере мы используем метод .popitem(), чтобы последовательно извлекать пары (ключ, значение) из словаря person. Мы продолжаем итерацию до тех пор, пока словарь не опустеет, и выводим каждую пару на экран.

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

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

squared_values = map(lambda x: x**2, person.values())
print(list(squared_values))

В данном примере мы используем функцию map(), чтобы создать новый список squared_values, включающий квадраты значений словаря person. Мы передаем лямбда-функцию lambda x: x**2 в качестве аргумента к map(), чтобы применить это преобразование к каждому значению.

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

filtered_values = filter(lambda x: x < 30, person.values())
print(list(filtered_values))

В этом примере мы используем функцию filter(), чтобы создать новый список filtered_values, включающий только значения, меньшие 30. Мы передаем лямбда-функцию lambda x: x < 30 в качестве аргумента функции filter(), чтобы отфильтровать значения person.values().

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

Шаг 1: Обход нескольких словарей с помощью ChainMap

from collections import ChainMap
dict_1 = {'a': 1, 'b': 2}
dict_2 = {'c': 3, 'd': 4}
combined_dict = ChainMap(dict_1, dict_2)
for key, value in combined_dict.items():
print(key, value)

В этом примере мы используем класс ChainMap из модуля collections, чтобы объединить два словаря dict_1 и dict_2 в один общий словарь combined_dict. Затем мы итерируем по парам (ключ, значение) в этом объединенном словаре и выводим их на экран.

Шаг 2: Обход цепочки словарей с помощью chain()

from itertools import chain
dict_1 = {'a': 1, 'b': 2}
dict_2 = {'c': 3, 'd': 4}
for key, value in chain(dict_1.items(), dict_2.items()):
print(key, value)

В данном примере мы используем функцию chain() из модуля itertools, чтобы создать одну последовательность пар (ключ, значение) из словарей dict_1 и dict_2. Затем мы итерируем по этой последовательности и выводим каждую пару на экран.

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

Шаг 1: Обход объединенных словарей с помощью оператора распаковки (**)

dict_1 = {'a': 1, 'b': 2}
dict_2 = {'c': 3, 'd': 4}
combined_dict = {**dict_1, **dict_2}
for key, value in combined_dict.items():
print(key, value)

В этом примере мы используем оператор распаковки **, чтобы объединить словари dict_1 и dict_2 в один общий словарь combined_dict. Затем мы итерируем по парам (ключ, значение) в этом объединенном словаре и выводим их на экран.

Выводы

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