从字典列表生成新字典列表时出现重复值问题求助
解决你的字典列表重复问题
嘿,别担心,这个问题其实很多Python新手都会遇到,我来帮你快速搞定!
问题根源
你现在的代码里,new_host = {}是定义在外层循环外面的,这意味着整个循环过程中你一直在修改同一个字典对象。每次把它添加到export_list_of_dictionaries里时,并没有创建新的字典,只是把这个字典的“引用”加了进去。所以最后列表里的1400个元素其实都指向同一个字典,自然显示的都是最后一次循环修改后的内容。
简单解决方案
只需要把new_host = {}移到外层循环的内部,让每次循环都创建一个全新的空字典就行:
# host_info 是从API获取的字典列表 # host_fields 是需要从host_info中提取的键列表 export_list_of_dictionaries = [] # 遍历host_info提取指定字段 for index in range(len(host_info)): # 每次循环都新建一个空字典,避免重复引用同一个对象 new_host = {} for field in host_fields: new_host[field] = host_info[index][field] export_list_of_dictionaries.append(new_host)
更Pythonic的写法(可选)
如果你想让代码更简洁,还可以用列表推导+字典推导的方式,一行搞定,而且更不容易出错:
export_list_of_dictionaries = [ {field: host[field] for field in host_fields} for host in host_info ]
这个写法的逻辑是:遍历host_info里的每一个host,为每个host生成一个只包含host_fields指定键的新字典,最后把所有新字典收集成一个列表。
这样修改后,你再查看export_list_of_dictionaries,每个字典都会对应原列表里的不同主机信息啦!
内容的提问来源于stack exchange,提问作者Rodney
相关产品推荐
相关产品推荐

