defaultdict如何获得列表中所有值的总和?
问题描述:
下面是代码: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没有按似乎不像普通列表那样工作。
答
试试这个:
d = defaultdict(int)
for model in models:
getids = model.objects.values_list('keyword', 'score')
for kw, score in getids:
d[kw] += score
答
您可以使用dict
全面每次取值
summed = {k: sum(v) for (k, v) in d.items()}
print(summed)
>>> {198: -245, 199: -660}
此外,defaultdict
就像一个dictionary
,而不是作为一个list
的总和。
答
只需更换相应其总和键列表。
for i in d:
d[i] = sum(d[i])
这里的关键是使用'int'作为默认工厂,以便您可以保持运行总和。 –
像一个魅力工作,欢呼声。 –