Цикл по словарю
Цикл for умеет проходить и по словарю. На каждой итерации переменная цикла получает один ключ в том порядке, в котором пары были добавлены. Значение, которое к нему относится, вы читаете в квадратных скобках, с ключом в переменной, как в предыдущем упражнении:
capitals = {"Чехия": "Прага", "Словакия": "Братислава", "Австрия": "Вена"}
for country in capitals:
print(country, "-", capitals[country])Чехия - Прага
Словакия - Братислава
Австрия - ВенаНа первой итерации в country лежит "Чехия", поэтому capitals[country] — это "Прага". На второй там "Словакия", и так далее.
Когда нужны и ключ, и значение, есть способ удобнее: метод .items(). Он отдаёт циклу пары словаря по одной, а после for вы пишете две переменные через запятую. Первая получает ключ, вторая — значение:
capitals = {"Чехия": "Прага", "Словакия": "Братислава", "Австрия": "Вена"}
for country, capital in capitals.items():
print(f"Страна: {country}, столица: {capital}.")Страна: Чехия, столица: Прага.
Страна: Словакия, столица: Братислава.
Страна: Австрия, столица: Вена.Имена двух переменных выбираете вы. Берите имена, которые говорят, что в них лежит: for country, capital in ... говорит больше, чем for key, value in ....
Приёмы из урока про циклы работают и здесь. Когда значения — числа, их можно сложить или выбрать некоторые пары с помощью if:
stock = {"яблоки": 12, "лимоны": 0, "груши": 5}
total = 0
for fruit, count in stock.items():
total += count
if count == 0:
print("Нет в наличии:", fruit)
print("Всего штук:", total)Нет в наличии: лимоны
Всего штук: 17Типичная ошибка — забыть .items(): for country, capital in capitals:. Тогда цикл получает только ключи, и Python пытается разложить каждый ключ, например текст "Чехия", на две переменные, по одной букве в каждую. Букв слишком много, поэтому программа завершается ошибкой ValueError: too many values to unpack (expected 2).
Задание
- 1
Напишите цикл
forс.items(), который проходит поscoresи выводит имя и баллы каждого игрока через двоеточие, напримерАнна: 12. - 2
Ниже, во втором цикле, выведите имена игроков, у которых не меньше 10 баллов, каждое на отдельной строке.