2013-07-25 9 views
7

私は辞書のリストを持っています。各ディクショナリには整数のキーとタプルの値があります。タプルの特定の位置にあるすべての要素を合計したいと思います。Python辞書一覧[int:tuple] Sum

例:これを行うためのより多くの神託の方法はあり

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

:私は私のような何かを行うことができます知っている

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

? Pythonの3のために

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

d.values()d.itervalues()を代用:ありがとう

+2

一般的なルールを:あなたは直接ループのために使用している場合は物事の多くの神託の方法があります。 –

+5

@ SlaterTyranus:私はそう言っていないでしょう、 'for'ループのためにたくさんのPythonを使用しています。 –

+1

@MartijnPieters私はそれらが存在すると確信していますが、すべてのマルチラインforループの90%以上がリファクタリングする必要のあるコードの指標であると感じています。明確にするには、forループを直接使用することは、インライン構文を使用しないことを意味します。 –

答えて

7

は、それらの値がすべての辞書をループ、ジェネレータ式を使用します。

デモ:そこへ

>>> 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

これは、より神託の方法である場合、私は知らない:親指の

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