3 回答
TA贡献1883条经验 获得超3个赞
由于 在两个数据列表中似乎是唯一的,因此您可以立即使用字典,它将 EUI 映射到其他数据:EUI
devices = {d.pop('EUI'): d for d in devices}
data = {d.pop('EUI'): d for d in data}
然后,您可以在 EUI 键上合并:
for k, d in data.items():
d.update(devices.get(k, {}))
TA贡献1825条经验 获得超4个赞
从迭代工具导入zip_longest
结果 = [{**u, **v} 为你, v in zip_longest(数据, 设备, 填充值={})] 打印(结果)
TA贡献1805条经验 获得超9个赞
我考虑了.
此方法保留原始和 。len(set(d['EUI'] for d in devices) ^ set(d['EUI'] for d in data)) > 0devicesdata
devices = [{'EUI': 123, 'Name': 'gum 1'}, {'EUI': 456, 'Name': 'gum 2'},
{'EUI': 789, 'Name': 'gum 3'}]
data = [{'EUI': 123, 'data': 111}, {'EUI': 456, 'data': 222},
{'EUI': 789, 'data': 333}]
device_dict = {
device['EUI']: device
for device in devices
}
results = [
{**device_dict.pop(datum['EUI'], {}), **datum} for datum in data
] + list(device_dict.values())
print(results)
输出:
[{'EUI': 123, 'Name': 'gum 1', 'data': 111}, {'EUI': 456, 'Name': 'gum 2', 'data': 222}, {'EUI': 789, 'Name': 'gum 3', 'data': 333}]
解释:
device_dict = {...}
:制作关于 的键控词典。EUI
devices
[{**device_dict[datum['EUI']], **datum} for datum in data]
:在循环数据时合并基准字典和设备字典**device_dict.pop(datum['EUI'], {})
而不是 :考虑是否不在 中。也从处理的s。**device_dict[datum['EUI']]
datum['EUI']
device_dict
pop
EUI
+ list(device_dict.values())
:附加其余部分(仅在device_dict
devices
)
转角案例数据:
devices = [{'EUI': 123, 'Name': 'gum 1'}, {'EUI': 456, 'Name': 'gum 2'},
{'EUI': 789, 'Name': 'gum 3'}, {'EUI': 888, 'Name': 'gum 4'}]
data = [{'EUI': 123, 'data': 111}, {'EUI': 456, 'data': 222},
{'EUI': 789, 'data': 333}, {'EUI': 777, 'data': 444}]
输出:
[{'EUI': 123, 'Name': 'gum 1', 'data': 111}, {'EUI': 456, 'Name': 'gum 2', 'data': 222}, {'EUI': 789, 'Name': 'gum 3', 'data': 333}, {'EUI': 777, 'data': 444}, {'EUI': 888, 'Name': 'gum 4'}]
添加回答
举报