Это очень простая проблема, когда он читает файл из CSV с заголовком первого столбца как «заголовок», а затем подсчитывает, сколько раз заголовок появляется в словаре. Но я не понимаю, на каком этапе он присваивает «название» словарю «названия».
Код:
import csv
titles = {}
with open("movies.csv", "r") as file:
reader = csv.DictReader(file)
for row in reader:
#title is defined here
title = row["title"].strip().upper()
if title in titles:
titles[title] = titles[title] + 1
else:
titles[title] = 1
Если он присваивается внутри блока else, то почему мой второй код, в котором я просто хочу присвоить значения словарю с именем «titles», а не подсчитывать количество раз, когда он появляется, не работает?:
import csv
titles = {}
with open("movies.csv", "r") as file:
reader = csv.DictReader(file)
for row in reader:
#title is defined here
title = row["title"].strip().upper()
if not title in titles:
titles[title]
print(titles[title])
Error: Key Value error
Привет, спасибо за ответ, не могли бы вы подсказать, как я могу напечатать это во второй версии без ошибок?
Ну, ты не можешь. Используйте первую версию. Или назначить что-то.
Элементы словаря представляют собой пары ключ:значение, которые сопоставляют ключ со значением. Не имеет смысла просто иметь ключ словаря без значения. Так что ваша вторая версия может быть titles[title] =0
или какой угодно. В качестве альтернативы вы можете использовать Set или List для хранения только заголовков.
Во второй версии у вас есть эта строка titles[title]
, которая не добавляет название в ваш словарь заголовков, как в первой версии. Поскольку заголовок отсутствует в словаре, доступ к нему приведет к ошибке значения ключа. Почему у вас есть строка titles[title]
, которая ничего не делает?
Но я думаю, что здесь есть большая проблема с вашей первой версией кода. Вы хотите добавить заголовок в словарь, если его еще нет, и добавить счетчик на 1, если нет. Но ваша первая версия делает обратное, что выдаст вам ошибку.
Если titles
является словарем, titles[title]
находит значение, соответствующее ключу title
. Ваша вторая версия ничего не помещает в словарь, поэтому titles[title]
вызывает ключевую ошибку.
Вы говорите, что хотите «присвоить значения словарю, но ничего не считать». Словарь - неправильная структура для этого. Если вам нужны уникальные заголовки, вы можете использовать set
:
import csv
titles = set()
with open("movies.csv", "r") as file:
reader = csv.DictReader(file)
for row in reader:
#title is defined here
title = row["title"].strip().upper()
titles.add(title)
print(titles)
Обратите внимание, что метод add
добавляет что-то только в том случае, если этого еще нет в наборе, как в математическом наборе. У вас больше нет пар ключ-значение, только элементы.
titles[title]
дает значение, присвоенное этому заголовку. Во 2-й версии с этим ничего не сделаешь.