更新/附加到字典

时间:2016-09-16 18:24:09

标签: python dictionary

我们说我有这样的字典:

x = {'age': 23,
     'channel': ['a'],
     'name': 'Test',
     'source': {'data': [1, 2]}}

和类似的一样:

y = {'age': 23,
     'channel': ['c'],
     'name': 'Test',
     'source': {'data': [3, 4], 'no': 'xyz'}}

如果我使用此x.update(y),我会丢失'channel'以前的信息。例如,如果值不同,我可以附加值,并在字典中不存在时添加键/值?

最终结果应为:

{'age': 23,
 'channel': ['a', 'c'],
 'name': 'Test',
 'source': {'data': [1, 2, 3, 4], 'no': 'xyz'}}

我接近这个:

for a,b in y.iteritems():
    try:
        x[a] = x[a] + y[a]
    except:
        x[a] = y[a]

但是当它在字典里找到一本字典时就失败了。

2 个答案:

答案 0 :(得分:2)

您的要求似乎有点模糊,但您可以使用递归函数执行您想要的操作,如下所示。 (至于我理解你的要求,你不能将附加到 dicts 对吗?或者像这些情况一样)

x = {'age': 23,
     'channel': ['a'],
     'name': 'Test',
     'source': {'data': [1, 2], 'no': 'jj'}}

y = {'age': 23,
     'channel': ['c'],
     'name': 'Test',
     'source': {'data': [3, 4], 'no': 'xyz'}}


def deep_update(x, y):
    for key in y.keys():
        if key not in x:
            x.update({key: y[key]})
        elif x[key] != y[key]:
            if isinstance(x[key], dict):
                x.update({key: deep_update(x[key], y[key])})
            else:
                x.update({key: list(set(x[key] + y[key]))})
    return x


print deep_update(x, y)
  

{'source':{'data':[1,2,3,4],'no':'jjxyz'},'age':23,'name':'测试','频道': ['a','c']}

答案 1 :(得分:0)

您可以访问与密钥关联的值并进行更改。 让我们看看你在问题中所采用的dict示例:

x = {'name': 'Test', 'age': 23, 'channel': ['a'], 'source': {'data':   [1,2]}}
x['channel']=['a']

值为list []类型。 您可以通过list.append()

将值附加或添加到列表中

所以,x['channel'].append('c')会给你:

{'age': 23, 'channel': ['a', 'c'], 'name': 'Test', 'source': {'data': [1, 2]}}