4

重複の可能性:
python: 辞書の辞書のマージ

my_dict= {'a':1, 'b':{'x':8,'y':9}}
other_dict= {'c':17,'b':{'z':10}}
my_dict.update(other_dict)

結果:

{'a': 1, 'c': 17, 'b': {'z': 10}}

しかし、私はこれが欲しい:

{'a': 1, 'c': 17, 'b': {'x':8,'y':9,'z': 10}}

これどうやってするの?(簡単な方法で?)

4

1 に答える 1

6
import collections # requires Python 2.7 -- see note below if you're using an earlier version
def merge_dict(d1, d2):
    """
    Modifies d1 in-place to contain values from d2.  If any value
    in d1 is a dictionary (or dict-like), *and* the corresponding
    value in d2 is also a dictionary, then merge them in-place.
    """
    for k,v2 in d2.items():
        v1 = d1.get(k) # returns None if v1 has no value for this key
        if ( isinstance(v1, collections.Mapping) and 
             isinstance(v2, collections.Mapping) ):
            merge_dict(v1, v2)
        else:
            d1[k] = v2

Python 2.7以降を使用していない場合はisinstance(v, collections.Mapping)isinstance(v, dict)(厳密な型付けの場合)またはhasattr(v, "items")(ダックタイピングの場合)に置き換えます。

一部のキーに競合がある場合(つまり、d1に文字列値があり、d2にそのキーのdict値がある場合)、この実装はd2からの値を保持するだけであることに注意してください(と同様update

于 2012-05-22T14:22:26.740 に答える