gpt4 book ai didi

python - 匹配字典集。最优雅的解决方案。 Python

转载 作者:太空狗 更新时间:2023-10-29 22:23:51 24 4
gpt4 key购买 nike

给定两个字典列表,新的和旧的。字典在两个列表中表示相同的对象。
我需要找到差异并生成新的词典列表,其中仅包含来自新词典的对象和来自旧词典的更新属性。
示例:

   list_new=[
{ 'id':1,
'name':'bob',
'desc': 'cool guy'
},

{ 'id':2,
'name':'Bill',
'desc': 'bad guy'
},

{ 'id':3,
'name':'Vasya',
'desc': None
},
]

list_old=[
{ 'id':1,
'name':'boby',
'desc': 'cool guy',
'some_data' : '12345'
},
{ 'id':2,
'name':'Bill',
'desc': 'cool guy',
'some_data' : '12345'

},
{ 'id':3,
'name':'vasya',
'desc': 'the man',
'some_data' : '12345'
},
{ 'id':4,
'name':'Elvis',
'desc': 'singer',
'some_data' : '12345'
},
]

在那个例子中,我想生成新列表,其中只有来自 list_new 的新人具有更新的数据。由 id 匹配。所以 Bob 会变成 Boby,Bill 会变成 coll guy,Vasya 会变成 - the man。 End Elvis 必须缺席。

给我一​​个优雅的解决方案。迭代循环次数较少。

有办法,我解决了。哪个不是最好的:

 def match_dict(new_list, old_list)
ids_new=[]
for item in new_list:
ids_new.append(item['id'])
result=[]
for item_old in old_medias:
if item_old['id'] in ids_new:
for item_new in new_list:
if item_new['id']=item_old['id']
item_new['some_data']=item_old['some_data']
result.append(item_new)
return result

之所以怀疑,是因为循环中有循环。如果将有 2000 个项目的列表,则该过程将花费相同的时间。

最佳答案

不能完全写成一行,但这里有一个更简单的版本:

def match_new(new_list, old_list) :
ids = dict((item['id'], item) for item in new_list)
return [ids[item['id']] for item in old_list if item['id'] in ids]

关于python - 匹配字典集。最优雅的解决方案。 Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5252519/

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