如果我正在读取各种对象并增加其相应字典键的值(例如,类别),其中字典的值是列表,则所有字典条目最终都具有相同的值,这是所有值的总和而不是预期的值。如果字典的值是float / int而不是列表,则不会发生这种情况。
category_dict = dict(zip(category_list,[0,0]*len(category_list)))
for item in data:
i = item['Type']:
category_dict[i][0] += item['Amount']
结果如下:
{item1: 98999, item2: 98999, item3: 98999...}
其中98999
是所有金额的总和。
感谢任何帮助。
答案 0 :(得分:0)
您可以使用defaultdict:
category_dict = collections.defaultdict(int)
for item in data:
cat = item['Type']
n = item['Amount']
category_dict[cat] += n
这应该给你类似的东西:
{item1: 53, item2: 12, item3: 4...}
我不太确定这是你想要的。 您正在讨论每个类别的列表,但您只使用该列表中的[0]。
修改强>
如果您需要每个类别的两个元素列表,您可以使用:
category_dict = collections.defaultdict(lambda: return [0,0])
for item in data:
cat = item['Type']
n = item['Amount']
category_dict[cat][0] += n
应该给你类似的东西:
{item1: [53,0], item2: [12,0], item3: [4,0]...}
答案 1 :(得分:0)
词典中的所有值都是相同的列表。增加值时
category_dict[i][0] += item['Amount']
你对字典中的所有项目都做了同样的事情
这是因为您实例化了这样的字典
category_dict = dict(zip(category_list,[0,0]*len(category_list)))
和[0,0]*n
是同一n
列表的[0,0]
份副本列表
尝试改为
category_dict = {k:[0,0] for k in category_list}