То, что вы делаете, это итерация по всему диктату для каждой ячейки, что немного странно и, вероятно, не то, что вы хотите сделать. То, что вы действительно хотите сделать, это просто посмотреть в диктовку и увеличить ключ. Итак:
# first part stays mostly the same
rows = csv.reader(open("...csv") )
allCounts = {}
for row in rows:
for field in row:
allCounts[field] = allCounts.get(field, 0) + 1
В последней строке используется небольшая функция dict
, которая возвращает значение по умолчанию, если ключ не найден.
В вашем собственном коде есть некоторые заметные недостатки. Наиболее значимой является четвертая и пятая строки. Вы извлекаете первое поле из выбранной строки и присваиваете ему intVal
, но затем полностью маскируете intVal
, используя его в качестве ключа при итерации по вашему dict. это означает, что это задание не работает вообще.
Предложение if
обречено. Вы проверяете, есть ли ключ в dict, но вы придумали этот ключ, перебирая ключи из того же самого dict. Конечно, этот ключ в диктате.
Следующая проблема заключается в том, что ваше предложение else
изменяет коллекцию, для которой вы выполняете итерацию. Python не дает никаких гарантий относительно того, как это будет работать для диктов, поэтому не делайте этого
В этом отношении нет никакой причины перебирать диктовку. Вы можете просто получить любую пару ключ-значение, которая вас интересует. То, что вы должны перебирать, это список целых чисел из файла.
Файл CSV всегда структурирован как список значений (обычно разделенных запятыми), которые образуют строки, а строки разделяются символами новой строки. модуль CSV сохраняет это представление, возвращая список списков. Чтобы перейти к фактическим значениям, необходимо выполнить итерацию по каждой строке, а затем по каждому полю в этой строке. Ваш код перебирает каждую строку, а затем каждый ключ в dict для каждой строки, игнорируя поля.