Python如何不使用嵌套循环合并两个按name关联的字典列表
实现方法
我们可以先把其中一个列表转换为以name为键的映射字典,利用字典O(1)的查找特性避免嵌套循环,整体时间复杂度为O(n+m),效率远高于嵌套循环方案。
示例代码(兼容所有Python3版本)
my_inital_list= [{"name": "Tom", "age": 30}, {"name": "Mark", "age": 25}, {"name": "Pam", "age": 97}] my_second_list = [{"name": "Pam", "quant": 10}, {"name": "Mark", "quant": 5}, {"name": "Tom", "quant": 7}] # 构造name到quant的映射字典,仅遍历一次第二个列表 name_quant_map = {item["name"]: item["quant"] for item in my_second_list} # 遍历一次第一个列表完成合并,无嵌套循环 my_final_list = [ {**item, "quant": name_quant_map[item["name"]]} for item in my_inital_list ]
Python3.9+ 简化写法(支持字典直接合并)
如果你的Python版本在3.9及以上,可以用更简洁的字典合并运算符|实现:
# 构造name到完整字典的映射 name_map = {item["name"]: item for item in my_second_list} # 直接合并两个字典 my_final_list = [item | name_map[item["name"]] for item in my_inital_list]
可选兼容逻辑
如果两个列表的name字段不完全匹配,可以用get方法设置默认值避免KeyError:
my_final_list = [ {**item, "quant": name_quant_map.get(item["name"], 0)} for item in my_inital_list ]
内容的提问来源于stack exchange,提问作者bellami molinka
相关产品推荐
相关产品推荐

