如何在python中合并两个数据结构

时间:2015-06-25 11:26:14

标签: python dictionary recursion data-structures iterator

我有两个复杂的数据结构(即.to和_from),我想用_from的相同实体覆盖_to的实体。 我举了这个例子。

# I am having two data structure _to and _from
# I want to override _to from _from
_to = {'host': 'test',
       'domain': [
           {
               'ssl': 0,
               'ssl_key': '',
           }
       ],
       'x': {}
       }
_from = {'status': 'on',
         'domain': [
             {
                 'ssl': 1,
                 'ssl_key': 'Xpyn4zqJEj61ChxOlz4PehMOuPMaxNnH5WUY',
                 'ssl_cert': 'nuyickK8uk4VxHissViL3O9dV7uGSLF62z52L4dAm78LeVdq'
             }
         ]
         }
### I want this output
_result = {'host': 'test',
           'status': 'on',
           'domain': [
               {
                   'ssl': 1,
                   'ssl_key': 'Xpyn4zqJEj61ChxOlz4PehMOuPMaxNnH5WUY',
                   'ssl_cert': 'nuyickK8uk4VxHissViL3O9dV7uGSLF62z52L4dAm78LeVdq'
               }
           ],
           'x': {}
           }

用例2:

_to = {'host': 'test',
       'domain': [
           {
               'ssl': 0,
               'ssl_key': '',
               'ssl_cert': 'nuyickK8uk4VxHissViL3O9dV7uGSLF62z52L4dAm78LeVdq',
               "abc": [],
               'https': 'no'
           }
       ],
       'x': {}
       }
_from = {
         'domain': [
             {
                 'ssl': 1,
                 'ssl_key': 'Xpyn4zqJEj61ChxOlz4PehMOuPMaxNnH5WUY',
                 'ssl_cert': 'nuyickK8uk4VxHissViL3O9dV7uGSLF62z52L4dAm78LeVdq'
             }
         ]
         }

dict.update(dict2)不会帮助我,因为这会删除_to dict中的额外键。

2 个答案:

答案 0 :(得分:7)

这很简单:

_to.update(_from)

答案 1 :(得分:1)

下面有一个陷阱:

_to = {'host': 'test',
       'domain': [
           {
               'ssl': 0,
               'ssl_key': '',
           }
       ],
       'x': {}
       }
_from = {'status': 'on',
         'domain': [
             {
                 'ssl': 1,
                 'ssl_cert': 'nuyickK8uk4VxHissViL3O9dV7uGSLF62z52L4dAm78LeVdq'
             }
         ]
         }
_to['domain']['ssl_key']时忽略

_to.update(_from) 如果您想进行深度更新,请查看Update value of a nested dictionary of varying depth