0

私は2つの辞書を持っています:

prices = {"banana": 4,"apple": 2}
stock = {"banana": 6,"apple": 0,}

1 と 2 の辞書 (この例では 4*6+2*0) から結合値の合計を取得するにはどうすればよいですか?

4

6 に答える 6

5
>>> 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}
于 2013-06-11T09:41:16.033 に答える
3

おそらく、他のソリューションよりも少し短くてきれいです。

>>> 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
于 2013-06-11T09:47:00.980 に答える
1

キーの交点をループします。

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
于 2013-06-11T09:41:20.110 に答える
0
>>> prices = {"banana": 4,"apple": 2}
>>> stock = {"banana": 6,"apple": 0}
>>> sum( prices[k] * stock[k] for k in stock)
24
于 2013-06-11T09:41:18.080 に答える
0
prices = {"banana": 4,"apple": 2} 
stock = {"banana": 6,"apple": 0,}
t=0
for i in prices:
      t+=prices[i]*stock[i]
print t
于 2013-06-11T09:45:05.023 に答える