Списки словарей
Один словарь описывает одну вещь. Когда однотипных вещей много, их словари кладут в список. Списки словарей встречаются в программировании повсюду: товары в интернет-магазине, сообщения в чате, ученики в классе.
movies = [
{"title": "Вверх", "year": 2009, "minutes": 96},
{"title": "Коко", "year": 2017, "minutes": 105},
{"title": "Шрек", "year": 2001, "minutes": 90}
]
print(movies[1])
print(movies[1]["title"]){'title': 'Коко', 'year': 2017, 'minutes': 105}
КокоКаждый элемент списка — это один словарь, а словари разделяются запятыми, как любые другие элементы. Чтобы добраться до одного значения, сначала выберите элемент по индексу, а затем значение по ключу. Читайте movies[1]["title"] слева направо: из movies возьмите элемент с индексом 1 (словарь «Коко»), а из него — значение "title".
Всё, что вы знаете о списках, по-прежнему работает: len(movies) — это число фильмов, .append() добавляет новый в конец, а в любом из них можно изменить значение, например movies[0]["minutes"] = 95.
Чаще всего по такому списку проходят циклом for. На каждой итерации переменная цикла хранит целый словарь:
for movie in movies:
print(f"{movie['title']} ({movie['year']})")Вверх (2009)
Коко (2017)
Шрек (2001)Хорошая привычка — называть список во множественном числе, а переменную цикла в единственном (movies, movie). Тогда код читается почти как предложение: for each movie in movies, то есть «для каждого фильма из фильмов».
Приёмы из урока про циклы работают и здесь, например сложение или выбор с помощью if:
total = 0
for movie in movies:
total += movie["minutes"]
if movie["year"] > 2005:
print("Новинка:", movie["title"])
print("Всего минут:", total)Новинка: Вверх
Новинка: Коко
Всего минут: 291Типичные ошибки:
movies["title"]: у самого списка нет названия, оно есть только у фильмов в нём. Списку нужен индекс в квадратных скобках, поэтому программа завершается ошибкойTypeError: list indices must be integers or slices, not str. Сначала выберите фильм:movies[0]["title"].total += movieвместоtotal += movie["minutes"]пытается прибавить к числу целый словарь:TypeError: unsupported operand type(s) for +=: 'int' and 'dict'.
Задание
- 1
Выведите, сделана ли третья задача, «Выучить Python»: выведите значение её ключа
"done". Вывод должен бытьFalse. - 2
Ниже напишите цикл
for, который выводит название каждой задачи, каждое на отдельной строке. - 3
Наконец, выведите
Нужно сделать:, а под ним названия задач, которые ещё не сделаны. Подсказка: значение"done"уже равноTrueилиFalse, поэтому его можно использовать в условии напрямую:if not task["done"]:.