У меня есть два списка словарей. Как мне объединить их, основываясь на ключе / значении, которое является общим для обоих?
data_list:
[{'app': u'568',
'browser_version': u'0',
'cost': u'9.4547e-08',
'device': u'iPad',
'device_brand': u'Apple',
'device_family': u'iPad',
'device_os': u'iOS',
'device_os_version': u'11.3',
'end_time': u'2018-05-03',
'key': '1',
'latency': 0.435227,
'megacycles': 370.0,
'ua_parse': u'40.10.7'},
{'app': u'571',
'browser_version': u'66.0.3359',
'cost': u'1.3075e-08',
'device': u'0',
'device_brand': u'0',
'device_family': u'Other',
'device_os': u'Mac OS X',
'device_os_version': u'10.12.6',
'end_time': u'2018-05-07',
'key': '2',
'latency': 0.191712,
'megacycles': 146.0,
'ua_parse': u'5.0'}]
и ret_data_list:
[{u'key': [u'1'], u'predictions': [0.044329315423965454]},
{u'key': [u'2'], u'predictions': [-0.17194432020187378]}]
Я хотел бы объединить на 'key'
. Я пробовал этот код из этой статьи
lst = sorted(itertools.chain(data_list,ret_data_list), key=lambda x:x['key'])
list_c = []
for k,v in itertools.groupby(lst, key=lambda x:x['key']):
d = {}
for dct in v:
d.update(dct)
list_c.append(d)
print list_c
Который напечатал список словарей, подобных этому:
[{u'predictions': [0.044329315423965454], u'key': [u'1']},
{u'predictions': [-0.17194432020187378], u'key': [u'2']},
{'megacycles': 370.0,
'latency': 0.435227,
'app': u'568',
'device_os_version': u'11.3',
'ua_parse': u'40.10.7',
'device_family': u'iPad',
'browser_version': u'0',
'cost': u'9.4547e-08',
'device_brand': u'Apple',
'end_time': u'2018-05-03',
'key': '1',
'device': u'iPad',
'device_os': u'iOS'},
{'megacycles': 146.0,
'latency': 0.191712,
'app': u'571',
'device_os_version': u'10.12.6',
'ua_parse': u'5.0',
'device_family': u'Other',
'browser_version': u'66.0.3359',
'cost': u'1.3075e-08',
'device_brand': u'0',
'end_time': u'2018-05-07',
'key': '2',
'device': u'0',
'device_os': u'Mac OS X'}]
Я хотел бы иметь список, который выглядит следующим образом, где прогнозы добавляются в data_list, совпадающий с key
(так, где 'key':'1' == u'key': [u'1']
)
[{'app': u'568',
'browser_version': u'0',
'cost': u'9.4547e-08',
'device': u'iPad',
'device_brand': u'Apple',
'device_family': u'iPad',
'device_os': u'iOS',
'device_os_version': u'11.3',
'end_time': u'2018-05-03',
'key': '1',
'latency': 0.435227,
'megacycles': 370.0,
'ua_parse': u'40.10.7',
'predictions': 0.044329315423965454},
{'app': u'571',
'browser_version': u'66.0.3359',
'cost': u'1.3075e-08',
'device': u'0',
'device_brand': u'0',
'device_family': u'Other',
'device_os': u'Mac OS X',
'device_os_version': u'10.12.6',
'end_time': u'2018-05-07',
'key': '2',
'latency': 0.191712,
'megacycles': 146.0,
'ua_parse': u'5.0',
'predictions': -0.17194432020187378}]