私は2つの辞書を持っています:
prices = {"banana": 4,"apple": 2}
stock = {"banana": 6,"apple": 0,}
1 と 2 の辞書 (この例では 4*6+2*0) から結合値の合計を取得するにはどうすればよいですか?
私は2つの辞書を持っています:
prices = {"banana": 4,"apple": 2}
stock = {"banana": 6,"apple": 0,}
1 と 2 の辞書 (この例では 4*6+2*0) から結合値の合計を取得するにはどうすればよいですか?
>>> prices = {"banana": 4,"apple": 2}
>>> stock = {"banana": 6,"apple": 0}
>>> {k: prices[k] * stock[k] for k in prices.viewkeys() & stock.viewkeys()}
{'banana': 24, 'apple': 0}
おそらく、他のソリューションよりも少し短くてきれいです。
>>> prices = {"banana": 4, "apple": 2}
>>> stock = {"banana": 6, "apple": 0}
>>> {key: value * stock.get(key, 0) for key, value in prices.items()}
{'banana': 24, 'apple': 0}
prices.iteritems()
Python 2 で使用します。
これにより、新しいセットの作成が回避され、技術的には 1 つのディクショナリ ルックアップのみが使用されます。合計だけが必要な場合は、これを使用します。
>>> sum(value * stock.get(key, 0) for key, value in prices.items())
24
キーの交点をループします。
mult = {}
for key in prices.viewkeys() & stock.viewkeys():
mult[key] = prices[key] * stock[key]
これは、辞書内包表記に単純化できます。
mult = {key: prices[key] * stock[key] for key in prices.viewkeys() & stock.viewkeys()}
これはdict.viewkeys()
メソッド ( dict.keys()
Python 3 では) を使用し、set
;のように動作します。&
演算子はセットの交差演算子のように機能し、両方の辞書に存在するすべてのキーを提供します。
総在庫を合計するには、次のsum()
関数を使用します。
total_stock = sum(prices[key] * stock[key] for key in prices.viewkeys() & stock.viewkeys())
デモ:
>>> prices = {"banana": 4,"apple": 2}
>>> stock = {"banana": 6,"apple": 0}
>>> {key: prices[key] * stock[key] for key in prices.viewkeys() & stock.viewkeys()}
{'banana': 24, 'apple': 0}
>>> sum(prices[key] * stock[key] for key in prices.viewkeys() & stock.viewkeys())
24
>>> prices = {"banana": 4,"apple": 2}
>>> stock = {"banana": 6,"apple": 0}
>>> sum( prices[k] * stock[k] for k in stock)
24
prices = {"banana": 4,"apple": 2}
stock = {"banana": 6,"apple": 0,}
t=0
for i in prices:
t+=prices[i]*stock[i]
print t