Python 按嵌套键合并词典列表
这里有很多类似的问题,但我找不到一个适用于我的案例的问题,即使我可以调整一个类似的问题来适用于我的案例,我到目前为止还没有成功 这是一个简单的问题:Python 按嵌套键合并词典列表,python,Python,这里有很多类似的问题,但我找不到一个适用于我的案例的问题,即使我可以调整一个类似的问题来适用于我的案例,我到目前为止还没有成功 这是一个简单的问题: my = [ {'operator': 'SET', 'operand': {'id': '9999', 'name': u'Foo'}}, {'operator': 'SET', 'operand': {'status': 'ACTIVE', 'id': '9999'}}] 我想将字典与公共['operand']['id']合
my = [
{'operator': 'SET', 'operand': {'id': '9999', 'name': u'Foo'}},
{'operator': 'SET', 'operand': {'status': 'ACTIVE', 'id': '9999'}}]
我想将字典与公共['operand']['id']合并
result = [
{'operator': 'SET', 'operand': {'id': '9999', 'name': u'Foo', 'status': 'ACTIVE'}}]
谢谢 这似乎是一个相当简单的问题,通过一些实验,你应该能够做到:) 这是我的版本,但有很多方法可以解决这个问题:
def merge(x):
out = {}
for y in x:
id_ = y['operand']['id']
if id_ not in out:
out[id_] = y
else:
out[id_]['operand'].update(y['operand'])
return out.values()
这是我的,也许有用
my = [ {'operator': 'SET',
'operand': {'id': '9999', 'name': u'Foo'} },
{'operator': 'SET',
'operand': {'status': 'ACTIVE', 'id': '9999'} } ]
def merge(mylist):
res_list = [{}]
tmp_dict = {}
for mydict in mylist:
for k in mydict.keys():
if type(mydict[k]) == dict:
for k2 in mydict[k]:
if k2 not in tmp_dict.keys():
tmp_dict[k2] = mydict[k][k2]
res_list[0][k] = tmp_dict
else:
res_list[0][k] = mydict[k]
return res_list
print f(my)
>>>
[{'operator': 'SET', 'operand': {'status': 'ACTIVE', 'id': '9999', 'name': u'Foo'}}]
但是那里没有列表…如果可能的话,我宁愿使用itertools你说的“那里没有列表”是什么意思?而且,在我看来,这并不是itertools
的好用例。我认为您需要一个字典来跟踪合并中的重复项,除非您可以编写充满低效线性搜索的代码。