gpt4 book ai didi

python - 合并版本化字典数组

转载 作者:太空宇宙 更新时间:2023-11-04 10:38:50 24 4
gpt4 key购买 nike

给定以下两个字典数组,我如何合并它们以使生成的字典数组只包含那些版本最好的字典?

data1 = [{'id': 1, 'name': u'Oneeee', 'version': 2},
{'id': 2, 'name': u'Two', 'version': 1},
{'id': 3, 'name': u'Three', 'version': 2},
{'id': 4, 'name': u'Four', 'version': 1},
{'id': 5, 'name': u'Five', 'version': 1}]

data2 = [{'id': 1, 'name': u'One', 'version': 1},
{'id': 2, 'name': u'Two', 'version': 1},
{'id': 3, 'name': u'Threeee', 'version': 3},
{'id': 6, 'name': u'Six', 'version': 2}]

合并结果应该是这样的:

data3 = [{'id': 1, 'name': u'Oneeee', 'version': 2},
{'id': 2, 'name': u'Two', 'version': 1},
{'id': 3, 'name': u'Threeee', 'version': 3},
{'id': 4, 'name': u'Four', 'version': 1},
{'id': 5, 'name': u'Five', 'version': 1},
{'id': 6, 'name': u'Six', 'version': 2}]

最佳答案

如果你想根据字典id获取最高版本那么你可以使用itertools.groupby像这样的方法:

sdata = sorted(data1 + data2, key=lambda x:x['id'])
res = []
for _,v in itertools.groupby(sdata, key=lambda x:x['id']):
v = list(v)
if len(v) > 1: # happened that the same id was in both datas
# append the one with higher version
res.append(v[0] if v[0]['version'] > v[1]['version'] else v[1])
else: # the id was in one of the two data
res.append(v[0])

解决方案不是一个单一的类轮,但我认为很简单(一旦你理解了 groupby() 这不是微不足道的)。

这将导致 res 包含此列表:

[{'id': 1, 'name': u'Oneeee', 'version': 2},
{'id': 2, 'name': u'Two', 'version': 1},
{'id': 3, 'name': u'Threeee', 'version': 3},
{'id': 4, 'name': u'Four', 'version': 1},
{'id': 5, 'name': u'Five', 'version': 1},
{'id': 6, 'name': u'Six', 'version': 2}]

我认为可以进一步缩小解决方案,但它可能很难理解。

希望这对您有所帮助!

关于python - 合并版本化字典数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22026844/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com