2015-10-13 166 views
3

下面是代碼:defaultdict如何獲得列表中所有值的總和?

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沒有按似乎不像普通列表那樣工作。

回答

5

試試這個:

d = defaultdict(int) 

for model in models: 

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

這裏的關鍵是使用'int'作爲默認工廠,以便您可以保持運行總和。 –

+0

像一個魅力工作,歡呼聲。 –

2

您可以使用dict全面每次取值

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

此外,defaultdict就像一個dictionary,而不是作爲一個list的總和。

0

只需更換相應其總和鍵列表。

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