匹配词典集.最优雅的解决方案Python

前端之家收集整理的这篇文章主要介绍了匹配词典集.最优雅的解决方案Python前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
给出两个词典列表,新词典和旧词典.字典表示两个列表中的相同对象.
我需要找到差异并生成新的词典列表,其中只有新词典中的对象和旧词典的更新属性.
例:
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的查找字典
>循环遍历list_new,如果它存在于old中,则为每个创建一个合并的dict

码:

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相关文章