2017-04-13 42 views
1

在我的字典中,每个条目都有一个元组列表(我的Python语法可能是错误的,请耐心等待)。它看起来是这样的:Pythong在字典中列表中的元组中求和值?

{1: [(2, 2), (4, 3), (6, 1), (7, 1), (8, 3)], 2: [(4, 1), (5, 3), (1, 2)],...} 

我想在数组中的每个条目总结第二值,即:

{1: (10), 2: (5)...} 

我一直在使用不同形式的

result = sum(y for v in dict.itervalues() for (x, y) in v)

但它将两个条目的所有值相加。

+5

'{K:总和(X为_,单位为V x)的在dict.items为K,V()}' – vaultah

+1

请注意,该值上的括号并不会使其成为一个元组,与“{1:10,2:5 ...}相同”# –

+1

@vaulth很好的答案! – Haranadh

回答

1

你可以这样做:

编辑:感谢@ vaultah的评论。

a = {1: [(2, 2), (4, 3), (6, 1), (7, 1), (8, 3)], 2: [(4, 1), (5, 3), (1, 2)]} 
final = {k:(sum(j for _,j in v),) for k,v in a.items()} 
print(final) 

Output: 

>>> {1: (10,), 2: (6,)} 
+1

即使假设OP想要将总和保存在一个元组中,也不值得调用'tuple'构造函数。 '(sum(j for _,j in v))''也可以。 – vaultah

+0

哦,是的!我不知道我可以在元组内做这样的事情!好评!谢谢。我会编辑我的答案。 –

0
sum = 0 
for item in dict: 
    for _,x in dict[item]: 
     sum = sum + x 
    print sum 
0

的另一种方法使用map/lambda来解决它:

result = {k: sum(map(lambda x: x[1], v)) for k, v in dict.items()}