递增字典值总是总和

时间:2014-12-02 16:54:17

标签: python dictionary

如果我正在读取各种对象并增加其相应字典键的值(例如,类别),其中字典的值是列表,则所有字典条目最终都具有相同的值,这是所有值的总和而不是预期的值。如果字典的值是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是所有金额的总和。

感谢任何帮助。

2 个答案:

答案 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}