Вот как вы можете предварительно инициализировать свой единственный словарь, содержащий все данные:
a = "eggs bacon ham".split()
summary = dict((key,([],[],[],[])) for key in a)
for lineno,line in enumerate(csv_file):
# first element in the line is assumed to be the key ("eggs", "bacon", etc.)
key = line[0]
# update the data values for this key
summary[key][0].append(lineno)
summary[key][1].append(something_else)
# ... etc.
Я нахожу этот вид индексированного доступа немного хрупким и предпочитаю доступ по ключу или по атрибутам.Ваш жестко запрограммированный список из 4 списков может быть лучше представлен как дикт или даже объекты некоторого простого класса подсчета данных.
Кроме того, я думаю, что ваш список "яиц", "бекона" и "ветчины" со временем будет расти, так как вы найдете записи в своем CSV-файле для "блинов", "вафель", "хэша"и так далее.В последнее время я все чаще и чаще использую defaultdict для подсчета данных при просмотре файлов данных или таблиц базы данных.Вместо того, чтобы заранее определять, какие ключи я ожидаю получить (и что мне нужно обновлять список самостоятельно, когда входные данные получают новые значения, добавленные к нему), defaultdict просто добавляет новые записи в форме, которую я определяю:
class Tally(object):
def __init__(self):
self.count = 0
self.lines = []
self.values = []
from collections import defaultdict
summary = defaultdict(Tally)
for lineno,line in enumerate(csv_file):
# first element in the line is assumed to be the key ("eggs", "bacon", etc.)
key = line[0]
# update the data values for this key
summary[key].count += 1
summary[key].lines.append(lineno)
summary[key].values.append(line[1])
# ... etc.
defaultdict избавляет меня от громоздких и повторяющихся накладных расходов «если ключ не в summarydict: добавить новую запись ...», поэтому мой код остается довольно чистым.