我们说我有这样的字典:
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]
但是当它在字典里找到一本字典时就失败了。
答案 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]}}