2017-04-13 78 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()}