Python字典列表[int : tuple]求和

7

我有一个字典列表。每个字典都有一个整数键和元组值。我想对元组中位于某个位置的所有元素求和。

例如:

myList = [{1000:("a",10)},{1001:("b",20)},{1003:("c",30)},{1000:("d",40)}]

我知道我可以做如下的事情:

sum = 0
for i in myList:
    for i in myList:
        temp = i.keys()
        sum += i[temp[0]][1]
print sum

有没有更符合Python风格的方法可以实现这个?谢谢。

2
一般的经验法则是:如果你直接使用for循环,那么有更Pythonic的方法来完成同样的事情。 - Slater Victoroff
5
@SlaterTyranus说:"我不会这样说,for循环有很多符合Python风格的用法。" - Martijn Pieters
1
@MartijnPieters 我确定它们存在,但我觉得超过90%的多行for循环都是需要重构的代码指标。澄清一下:直接使用for循环是指不使用内联语法。 - Slater Victoroff
我猜这是一个复制粘贴错误,但为什么要双重循环?由于原始列表中有四个项目,您最终得到的总和是400而不是100。 - thumbtackthief
3个回答

7

使用生成器表达式,循环遍历所有字典及其值:

sum(v[1] for d in myList for v in d.itervalues())

针对 Python 3,将 d.itervalues() 替换为 d.values()
示例代码:
>>> sum(v[1] for d in myList for v in d.itervalues())
100

0
import itertools
sum((v[1][1] for v in itertools.chain(*[d.items() for d in myList])))

itertools 可以将多个列表“链”在一起,逻辑上它们就像是一个列表。


0

我不知道这是否是更符合Python风格的方式:

print sum([i[i.keys()[0]][1] for i in myList])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接