質問が正しいかどうかはわかりませんが、次のことを意味します。
私が辞書を持っているとしましょう
p = {'A' : 1, 'B' : 2, 'C' : 3}
それから私はリストを持っています
q = ['A', 'B']
結果が 3 になるように q を合計するにはどうすればよいですか?
ありがとう!
質問が正しいかどうかはわかりませんが、次のことを意味します。
私が辞書を持っているとしましょう
p = {'A' : 1, 'B' : 2, 'C' : 3}
それから私はリストを持っています
q = ['A', 'B']
結果が 3 になるように q を合計するにはどうすればよいですか?
ありがとう!
組み込み関数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
別のアプローチ: が のようなオブジェクトを返すという事実を利用viewkeys
します。大きなリストの場合、これによりパフォーマンスが向上します。dictionary
set
sum(p[x] for x in p.viewkeys() & q)