Первое, что нужно знать, это то, что у вас нет двух разных словарей.У вас есть два разных списка словарей.Во-вторых, вы не объясняете, что именно считается дубликатом.В-третьих, вы не говорите, что делать с клавишей relevance
.
Я предполагаю, что два словаря с эквивалентными ключами type
и name
идентичны, и что вы хотите, чтобы значения relevance
были объединены в список.Затем вы могли бы усреднить их, или что-то еще.
def gen_key(d):
return (d['name'], d['type'])
def merge_dupes(dlist):
relevance = [float(d['relevance']) for d in dlist]
name, type = dlist[0]['name'], dlist[0]['type']
return {'name':name, 'type':type, 'relevance':relevance}
to_merge = {}
for l in (x, y):
for d in l:
to_merge.setdefault(gen_key(d), []).append(d)
# if you want another list
merged_list = [merge_dupes(l) for l in to_merge.itervalues()]
# if you'd prefer a dictionary
merged_dict = dict((k, merge_dupes(v)) for k, v in to_merge.iteritems())
Выход:
>>> pprint(merged_list)
[{'name': u'Rob Hirschfeld',
'relevance': [0.44458599999999998],
'type': u'Person'},
{'name': 'VMs',
'relevance': [0.314, 0.52216899999999999],
'type': 'OperatingSystem'},
{'name': 'Greg Althaus',
'relevance': [0.32700000000000001, 0.41398800000000002],
'type': 'Person'},
{'name': 'Storage Hardware',
'relevance': [0.17399999999999999],
'type': 'Company'},
{'name': u'iSCSI',
'relevance': [0.37648900000000002],
'type': u'FieldTerminology'},
{'name': 'Force10',
'relevance': [0.26600000000000001, 0.31405899999999998],
'type': 'Company'},
{'name': 'http://Dell.com/OpenStack',
'relevance': [0.085000000000000006],
'type': 'URL'},
{'name': 'Dell',
'relevance': [0.72199999999999998, 0.87406499999999998],
'type': 'Company'},
{'name': 'iSCSI', 'relevance': [0.122], 'type': 'Technology'}]
>>> pprint(merged_dict)
{('Dell', 'Company'): {'name': 'Dell',
'relevance': [0.72199999999999998,
0.87406499999999998],
'type': 'Company'},
('Force10', 'Company'): {'name': 'Force10',
'relevance': [0.26600000000000001,
0.31405899999999998],
'type': 'Company'},
('Greg Althaus', 'Person'): {'name': 'Greg Althaus',
'relevance': [0.32700000000000001,
0.41398800000000002],
'type': 'Person'},
(u'Rob Hirschfeld', u'Person'): {'name': u'Rob Hirschfeld',
'relevance': [0.44458599999999998],
'type': u'Person'},
('Storage Hardware', 'Company'): {'name': 'Storage Hardware',
'relevance': [0.17399999999999999],
'type': 'Company'},
('VMs', 'OperatingSystem'): {'name': 'VMs',
'relevance': [0.314, 0.52216899999999999],
'type': 'OperatingSystem'},
('http://Dell.com/OpenStack', 'URL'): {'name': 'http://Dell.com/OpenStack',
'relevance': [0.085000000000000006],
'type': 'URL'},
(u'iSCSI', u'FieldTerminology'): {'name': u'iSCSI',
'relevance': [0.37648900000000002],
'type': u'FieldTerminology'},
('iSCSI', 'Technology'): {'name': 'iSCSI',
'relevance': [0.122],
'type': 'Technology'}}