defaultdict如何获取列表中所有值的总和?

时间:2015-10-13 20:48:23

标签: python

以下是代码:

models = [Url1, Url2, Url3, Url4, Url5, Url6, Url7, Url8, Url9, Url10]
d = defaultdict(list)

for model in models:

    getids = model.objects.values_list('keyword', 'score')
    for kw, score in getids:
        d[kw].append(score)

这使'd'输出:

defaultdict(<type 'list'>, {198: [-70, 0, 5, -70, 5, 5, 0, 0, -50, -70],     
199: [0, -70, -70, -70, -70, -70, -100, -70, -70, -70]})

如何让它返回:

defaultdict({198: -245, 199: -660}) #sum of all numbers inside lists, returned as values to both keys.

我尝试循环但是deafultdict似乎不像普通列表那样工作。

3 个答案:

答案 0 :(得分:6)

试试这个:

d = defaultdict(int)

for model in models:

    getids = model.objects.values_list('keyword', 'score')
    for kw, score in getids:
        d[kw] += score

答案 1 :(得分:2)

您可以使用dict综合来获取每个值的总和

 summed = {k: sum(v) for (k, v) in d.items()}
 print(summed) 
 >>> {198: -245, 199: -660}

此外,defaultdict的行为与dictionary相同,而不是list

答案 2 :(得分:0)

只需将与键对应的列表替换为其总和。

for i in d:
     d[i] = sum(d[i])