Как перебирать словарь в цикле python
Перейти к содержимому

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

  • автор:

Циклы в Python

При написании программ часто возникает потребность делать одно и то же действие для нескольких объектов. Например, сохранить 5 пользователей:

user1.save() user2.save() user3.save() user4.save() user5.save() 

Кода пока не очень много, но что будет, когда пользователей будет 20? А что если нужно обработать 3 миллиона пользователей вашего сайта? Помогут циклы.

Цикл по списку

Цикл — это запуск одного и того же кода для каждого элемента в списке. Вот как выглядит пример выше с использованием списка и циклов:

users = [user1, user2, user3, user4, user5] for user in users: user.save() 

Каждый элемент списка users по очереди подставится в переменную user и для него запустится код с отступом.

Что, всё ещё копипастить пользователей в список? Нет, чаще всего такое не требуется и код выглядит так:

users = get_users_from_database() # возвращает список всех пользователей for user in users: user.do_something() # работа с каждым пользователем по очереди user.save() 

Снова, каждый пользователь по очереди попадёт в переменную user , у него вызовется метод .do_something() , а затем метод .save() .

Цикл по словарю

Словарь очень легко можно превратить в 2 списка:

capitals =  "Russia": "Moscow", "England": "London", "China": "Beijing", "Italy": "Rome" > 

Первый список — ключи словаря (первые элементы в парах):

print(capitals.keys()) # ['Russia', 'England', 'China', 'Italy'] 

Второй список — значения (вторые элементы в парах):

print(capitals.values()) # ['Moscow', 'London', 'Beijing', 'Rome'] 

По умолчанию, если передать в for словарь, он начнёт перебирать ключи:

for country in capitals: print(country) # Russia # England # China # Italy 

Но так же через ключи словаря можно добраться и до значений:

for country in capitals: capital = capitals[country] print("столица <> это <>".format(country,capital)) # столица Russia это Moscow # столица England это London # столица China это Beijing # столица Italy это Rome 

В Python есть ещё один способ добраться до значений словаря, использовать .items() . Этот метод превращает словарь в список кортежей:

print(capitals) # # "Russia": "Moscow", # "England": "London", # "China": "Beijing", # "Italy": "Rome" # > print(capitals.items()) # [ # ('Russia', 'Moscow'), # ('England', 'London'), # ('China', 'Beijing'), # ('Italy', 'Rome') # ] 

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

for country, capital in capitals.items(): print("столица <> это <>".format(country, capital)) # столица Russia это Moscow # столица England это London # столица China это Beijing # столица Italy это Rome 

Выполнить код несколько раз

Что, если нужно выполнить код заранее известное количество раз? например, сгенерировать 10 случайных чисел и вывести на экран? По какому такому списку мне перебиать элементы?

В таком случаевыручает функция range() .

Что она делает проще показать на примерах:

  • range(5) — вернёт список из 5 элементов, начинаяс нуля: [0, 1, 2, 3, 4]
  • range(2,10) — вернёт список из элементов от 2 до 10: [2, 3, 4, 5, 6, 7, 8, 9]
  • range(2,10,3) — вернёт список из каждого третьего элемента от 2 до 10: [2, 5, 8]

Теперь, научившись генерировать списки нужной длины, можно сгенерировать 10 случайных чисел:

import random for number in range(10): print(random.randint(1,100)) 

В терминал выведется 10 случайных чисел от 1 до 100. Работает так же, как и ранее: range(10) — это список с числами от 0 до 9. Они по очереди подставятся в переменную number , но ни на что не повлияют, т.к. в коде «внутри for » переменная number не используется.

Строка — тоже “список”

Python запросто переводит одни типы данных в другие. Он может притвориться, что строка — это список из её символов:

text = "Девман" for letter in text: print(letter) # Д # е # в # м # а # н 

Можно превратить строку в список более явно с помощью функции list() :

text = "Девман" my_list = list(text) print(my_list) # ['Д', 'е', 'в', 'м', 'а', 'н'] 

Что дальше

Попробуйте бесплатные уроки по Python

Получите крутое код-ревью от практикующих программистов с разбором ошибок и рекомендациями, на что обратить внимание — бесплатно.

Переходите на страницу учебных модулей «Девмана» и выбирайте тему.

Как перебрать список словарей в одном цикле?

6046a0ef80237336569478.png

Вот результат который я хочу получить:

Чтобы получить подобный результат я перебрал словари по отдельности. Можно ли сделать это за один цикл и если да, то как?
Заранее спасибо

  • Вопрос задан более двух лет назад
  • 1061 просмотр

1 комментарий

Простой 1 комментарий

for key, value in car_info.items(): info[key] = value

можно сделать так
info.update(car_info)

А перебирать словари в цикле для такой печати построчно это нормально. И то, что «по отдельности», по факту эта структура похожа на вложенный список, поэтому 2 цикла вполне нормально. Предполагаю это выглядело примерно так.

for car in cars: for k,v in car.items(): print(f" - ")

Решения вопроса 2
Python Developer

Ну во первых, для создания словарей советую почитать про словарные включения, и defaultdict, что бы не изобритать велосипеды свои, во вторых, что значит перебрать за один цикл? Вы хотите вывести значения каждого словаря из списка в одном цикле? Если да, то не получится, и не нужно, перебираете просто список а во вложенном цикле перебираете значения словаря, либо если очень хочется в одом цикле, тогда просто print(item.values())
В цикле, но вывод будет кортежами ключ-значение

27. Перебор элементов словаря в Python

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

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

numbers = 

for item in numbers:
print(item, numbers[item])

Теперь разберемся с тем, что возвращают методы items() , keys() и values() :

print(numbers.items()) # => dict_items([(1, 'One'), (2, 'Two'), (3, 'Three'), (4, 'Four')])
print(numbers.keys()) # => dict_keys([1, 2, 3, 4])
print(numbers.values()) # => dict_values(['One', 'Two', 'Three', 'Four'])

Метод items() возвращает список кортежей из двух элементов. Первый элемент является ключом, второй – значением. Про кортежи мы кратко говорили в уроке 5.1. и более подробно разберемся, начиная с урока 9.1. Методы keys() и values() возвращают список ключей и список значений, соответственно.

Сначала отвлечемся и вспомним, что в Python можно инициализировать переменные, записанные через запятую, присвоив им список или кортеж соответствующего размера:

a, b, c = (1, 2, 3)

А теперь вернемся к методу items() , который возвращает кортеж, и перепишем первый пример:

numbers = 

for k, v in numbers.items():
print(k, v)

В этом уроке познакомились с методами items() , keys() и values() , которые пригодятся в следующих уроках по Python.

Методы словаря, перебор элементов словаря в цикле

который формирует словарь с ключами, указанными в списке и некоторым значением. Например, передадим методу список с кодами стран:

a = dict.fromkeys(["+7", "+6", "+5", "+4"])

в результате, получим следующий словарь:

Обратите внимание, все значения у ключей равны None. Это значение по умолчанию. Чтобы его изменить используется второй необязательный аргумент, например:

a = dict.fromkeys(["+7", "+6", "+5", "+4"], "код страны")

на выходе получаем словарь с этим новым указанным значением:

d.clear()

служит для очистки словаря, то есть, удаления всех его элементов.

Далее, для создания копии словаря используется метод copy:

d = {True: 1, False: "Ложь", "list": [1,2,3], 5: 5} d2 = d.copy() d2["list"] = [5,6,7] print(d) print(d2)

Также копию можно создавать и с помощью функции dict(), о которой мы с вами говорили на предыдущем занятии:

d2 = dict(d)

Результат будет абсолютно таким же, что и при вызове метода copy().

Следующий метод get позволяет получать значение словаря по ключу:

d.get("list")

Его отличие от оператора

d["list"]

в том, что при указании неверного ключа не возникает ошибки, а выдается по умолчанию значение None:

print(d.get(3))

Это значение можно изменить, указав его вторым аргументом:

print( d.get(3, False) )

возвращает значение, ассоциированное с ключом key и если его нет, то добавляет в словарь со значением None, либо default – если оно указано:

d.setdefault("list") d.setdefault(3)

Добавит ключ 3 со значением None. Удалим его:

del d[3] d.setdefault(3, "three")

тогда добавится этот ключ со значением «three». То есть, этот метод способен создать новую запись, но только в том случае, если ключ отсутствует в словаре.

d.pop(3)

удаляет указанный ключ и возвращает его значение. Если в нем указывается несуществующий ключ, то возникает ошибка:

d.pop("abc")

Но мы можем легко исправить ситуацию, если в качестве второго аргумента указать значение, возвращаемое при отсутствии ключа:

d.pop("abc", False)

Здесь возвратится False. Если же ключ присутствует, то возвращается его значение.

d.popitem()

выполняет удаление произвольной записи из словаря. Если словарь пуст, то возникает ошибка:

d2 = {} d2.popitem()
d.keys()

возвращает коллекцию ключей. По умолчанию цикл for обходит именно эту коллекцию, при указании словаря:

d = {True: 1, False: "Ложь", "list": [1,2,3], 5: 5} for x in d: print(x)

то есть, эта запись эквивалента такой:

for x in d.keys(): .

Если же вместо keys записать метод values:

for x in d.values(): .

то обход будет происходить по значениям, то есть, метод values возвращает коллекцию из значений словаря.

Последний подобный метод items

for x in d.items(): .

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

print(x[0], x[1])

Или, используя синтаксис множественного присваивания:

x,y = (1, 2)

можно записать цикл for в таком виде:

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

что гораздо удобнее и нагляднее.

Следующий метод update() позволяет обновлять словарь содержимым другого словаря. Например, есть два словаря:

d = dict(one = 1, two = 2, three = "3", four = "4") d2 = {2: "неудовлетворительно", 3: "удовлетворительно", 'four': "хорошо", 5: "отлично"}

И мы хотим первый обновить содержимым второго:

d.update(d2)

Смотрите, ключ four был заменен строкой «хорошо», а остальные, не существующие ключи были добавлены.

Если же нам нужно создать новый словарь, который бы объединял содержимое обоих, то для этого можно воспользоваться конструкцией:

d3 = {**d, **d2}

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

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

Видео по теме

#1. Первое знакомство с Python Установка на компьютер

#2. Варианты исполнения команд. Переходим в PyCharm

#3. Переменные, оператор присваивания, функции type и id

#4. Числовые типы, арифметические операции

#5. Математические функции и работа с модулем math

#6. Функции print() и input(). Преобразование строк в числа int() и float()

#7. Логический тип bool. Операторы сравнения и операторы and, or, not

#8. Введение в строки. Базовые операции над строками

#9. Знакомство с индексами и срезами строк

#10. Основные методы строк

#11. Спецсимволы, экранирование символов, row-строки

#12. Форматирование строк: метод format и F-строки

#13. Списки — операторы и функции работы с ними

#14. Срезы списков и сравнение списков

#15. Основные методы списков

#16. Вложенные списки, многомерные списки

#17. Условный оператор if. Конструкция if-else

#18. Вложенные условия и множественный выбор. Конструкция if-elif-else

#19. Тернарный условный оператор. Вложенное тернарное условие

#20. Оператор цикла while

#21. Операторы циклов break, continue и else

#22. Оператор цикла for. Функция range()

#23. Примеры работы оператора цикла for. Функция enumerate()

#24. Итератор и итерируемые объекты. Функции iter() и next()

#25. Вложенные циклы. Примеры задач с вложенными циклами

#26. Треугольник Паскаля как пример работы вложенных циклов

#27. Генераторы списков (List comprehensions)

#28. Вложенные генераторы списков

#29. Введение в словари (dict). Базовые операции над словарями

#30. Методы словаря, перебор элементов словаря в цикле

#31. Кортежи (tuple) и их методы

#32. Множества (set) и их методы

#33. Операции над множествами, сравнение множеств

#34. Генераторы множеств и генераторы словарей

#35. Функции: первое знакомство, определение def и их вызов

#36. Оператор return в функциях. Функциональное программирование

#37. Алгоритм Евклида для нахождения НОД

#38. Именованные аргументы. Фактические и формальные параметры

#39. Функции с произвольным числом параметров *args и **kwargs

#40. Операторы * и ** для упаковки и распаковки коллекций

#41. Рекурсивные функции

#42. Анонимные (lambda) функции

#43. Области видимости переменных. Ключевые слова global и nonlocal

#44. Замыкания в Python

#45. Введение в декораторы функций

#46. Декораторы с параметрами. Сохранение свойств декорируемых функций

#47. Импорт стандартных модулей. Команды import и from

#48. Импорт собственных модулей

#49. Установка сторонних модулей (pip install). Пакетная установка

#50. Пакеты (package) в Python. Вложенные пакеты

#51. Функция open. Чтение данных из файла

#52. Исключение FileNotFoundError и менеджер контекста (with) для файлов

#53. Запись данных в файл в текстовом и бинарном режимах

#54. Выражения генераторы

#55. Функция-генератор. Оператор yield

#56. Функция map. Примеры ее использования

#57. Функция filter для отбора значений итерируемых объектов

#58. Функция zip. Примеры использования

#59. Сортировка с помощью метода sort и функции sorted

#60. Аргумент key для сортировки коллекций по ключу

#61. Функции isinstance и type для проверки типов данных

#62. Функции all и any. Примеры их использования

#63. Расширенное представление чисел. Системы счисления

#64. Битовые операции И, ИЛИ, НЕ, XOR. Сдвиговые операторы

#65. Модуль random стандартной библиотеки

#66. Аннотация базовыми типами

#67. Аннотации типов коллекций

#68. Аннотации типов на уровне классов

#69. Конструкция match/case. Первое знакомство

#70. Конструкция match/case с кортежами и списками

#71. Конструкция match/case со словарями и множествами

#72. Конструкция match/case. Примеры и особенности использования

© 2024 Частичное или полное копирование информации с данного сайта для распространения на других ресурсах, в том числе и бумажных, строго запрещено. Все тексты и изображения являются собственностью сайта

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *