1

質問が正しいかどうかはわかりませんが、次のことを意味します。

私が辞書を持っているとしましょう

p = {'A' : 1, 'B' : 2, 'C' : 3}

それから私はリストを持っています

q = ['A', 'B']       

結果が 3 になるように q を合計するにはどうすればよいですか?

ありがとう!

4

4 に答える 4

6

組み込み関数sumとジェネレーター式を使用します。

>>> p = {'A' : 1, 'B' : 2, 'C' : 3}
>>> q = ['A','B']
#using generator expression
>>> sum(p.get(x,0) for x in q)
3
#using list comprehension, not memory efficient
>>> sum( [p.get(x,0) for x in q] )
3

の要素qが見つからないp場合はdict.get、デフォルト値が返される0ため、エラーは発生しません。

ヘルプdict.get:

>>> print dict.get.__doc__
D.get(k[,d]) -> D[k] if k in D, else d.  d defaults to None.

リスト内包表記のバージョンは、次とほぼ同等です。

sums = []
for x in q:                  #loop over each item in q            
    sums.append(p.get(x,0))  #fetch the value of item from p and append it to sums  
print sum(sums)              # sum the list sums

(p.get(x,0) for x in q)メモリ内にリスト全体を生成する代わりに、一度に 1 つの値を返します。

summ = 0
for x in q:
    summ += p.get(x,0)
print summ
于 2013-06-01T22:19:51.800 に答える
2

別のアプローチ: が のようなオブジェクトを返すという事実を利用viewkeysします。大きなリストの場合、これによりパフォーマンスが向上します。dictionaryset

sum(p[x] for x in p.viewkeys() & q)
于 2013-06-01T22:52:36.237 に答える