匹配词典集.最优雅的解决方案Python
发布时间:2020-11-17 01:38:40 所属栏目:Python 来源:互联网
导读:给出两个词典列表,新词典和旧词典.字典表示两个列表中的相同对象. 我需要找到差异并生成新的词典列表,其中只有新词典中的对象和旧词典的更新属性. 例: list_new=[ { id:1, name:bob, desc: cool gay },
|
给出两个词典列表,新词典和旧词典.字典表示两个列表中的相同对象.
list_new=[
{ 'id':1,'name':'bob','desc': 'cool gay'
},{ 'id':2,'name':'Bill','desc': 'bad gay'
},{ 'id':3,'name':'Vasya','desc': None
},]
list_old=[
{ 'id':1,'name':'boby','desc': 'cool gay','some_data' : '12345'
},'some_data' : '12345'
},'name':'vasya','desc': 'the man',{ 'id':4,'name':'Elvis','desc': 'singer',]
所以..在那个例子中我想要生成新的列表,其中只有list_new的新同性恋者有更新的数据.由id匹配.所以Bob将成为Boby,比尔将成为同性恋,Vasya成为 – 男人.结束猫王必须缺席. 给我一个优雅的解决方案.使用较少量的迭代循环. 有办法,我解决了这个问题.哪个不是最好的: 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个项目的列表,则该过程将花费相同的时间. 解决方法脚步:>按id创建list_old的查找字典 码: def match_dict(new_list,old_list):
old = dict((v['id'],v) for v in old_list)
return [dict(d,**old[d['id']]) for d in new_list if d['id'] in old]
编辑:在函数内部命名错误的变量. (编辑:东莞站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- python – 为什么最后一个命令变量“_”不出现在dir()中?
- python – 为什么pow(x,y)的时间复杂度为O(1),而x ** y为O(
- django-rest-framework序列化器在多个视图中的不同字段
- python-2.7 – Sphinx的LaTeX错误:找不到文件`titlesec.st
- gettext – Flask-Babel如何在Jinja模板文件中使用翻译
- python – 在数组末尾添加n个零
- python – Google App Engine中模型的默认值
- python – Pandas:根据来自另一列的匹配替换列值
- python – 不同的标准在大熊猫vs numpy
- 匹配词典集.最优雅的解决方案Python
