3

私は2つの辞書のコンテンツを統合するためのPythonの方法(可能な限り少ないコード)を探しています:

basket1 = {"ham":2,"eggs":3}
basket2 = {"eggs":4,"spam":1}

他の2つの「合計」となる3番目のバスケットを取得したいのですが、バスケット3は次のようになります。

basket3 --> {"ham":2,"eggs":7,"spam":1}

可能であれば、これを使用してこれを行うset

4

3 に答える 3

10

を使用します。これは、いくつかの優れたプロパティを持つCounter一種です。defaultdict

>>> from collections import Counter
>>> basket1 = {"ham":2,"eggs":3}
>>> basket2 = {"eggs":4,"spam":1}
>>> basket_sum = Counter(basket1) + Counter(basket2)
>>> basket_sum
Counter({'eggs': 7, 'ham': 2, 'spam': 1})

dict必要に応じて、これを純粋に戻すことができます。

>>> dict(basket_sum)
{'eggs': 7, 'ham': 2, 'spam': 1}
于 2012-12-27T21:04:02.440 に答える
4

値を数えようとしているので、次を使用しますcollections.Counter

basket3 = collections.Counter(basket1)
basket3.update(basket2)

または:

basket3 = collections.Counter(basket1) + collections.Counter(basket2)
于 2012-12-27T21:02:25.467 に答える
2
In [2]: basket1 = {"ham":2,"eggs":3}

In [3]: basket2 = {"eggs":4,"spam":1}

In [4]: baskets = [basket1, basket2]

In [5]: answer = collections.defaultdict(int)

In [6]: for basket in baskets:
   ...:     for item in basket:
   ...:         answer[item] += basket[item]
   ...:         

In [7]: answer
Out[7]: defaultdict(<type 'int'>, {'eggs': 7, 'ham': 2, 'spam': 1})

In [8]: dict(answer)
Out[8]: {'eggs': 7, 'ham': 2, 'spam': 1}
于 2012-12-27T21:06:01.060 に答える