以下是您可以如何预初始化包含所有数据的一个字典:
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 个列表的硬编码列表可能更好地表示为 dict 甚至是一些简单的数据统计类的对象。
此外,我认为您的“鸡蛋”、“培根”和“火腿”列表会随着时间的推移而增长,因为您会在 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 为我节省了繁琐且重复的“如果 key 不在 summarydict 中:添加新条目...”开销,因此我的代码保持相当干净。