如何高效合并两个键名不同的字典列表?
高效合并两个关联列表的方法
原列表数据:
lst1 = [{"name": "Hanna", "age":3}, {"name": "Kris", "age": 18}, {"name":"Dom", "age": 15}, {"name":"Tom", "age": 5}] lst2 = [{"username": "Kris", "Town": "Big City"}, {"username":"Dom", "Town": "NYC"}]
需求是将lst2中与lst1name匹配的username对应的Town字段,合并到lst1的对应元素中,得到目标列表。
核心思路:构建映射字典降低查找复杂度
嵌套遍历的时间复杂度为O(n*m)(n、m分别为两个列表的长度),效率极低。最高效的方式是先将lst2转换为以username为键的映射字典,把查找操作的复杂度降到O(1),再遍历lst1完成合并,整体时间复杂度为O(n+m)。
实现代码
- 构建快速查找的映射字典
# 生成:username -> 除username外的其他键值对的映射 user_extra_map = {item['username']: {k: v for k, v in item.items() if k != 'username'} for item in lst2}
- 遍历lst1完成合并(不修改原列表)
merged_list = [] for item in lst1: # 复制原元素,避免污染原始数据 new_item = item.copy() # 若当前name有对应额外信息,直接合并 new_item.update(user_extra_map.get(item['name'], {})) merged_list.append(new_item)
如果使用Python 3.9+,可以用字典合并运算符|简化为列表推导式:
merged_list = [item.copy() | user_extra_map.get(item['name'], {}) for item in lst1]
合并结果
[ {"name": "Hanna", "age":3}, {"name": "Kris", "age": 18, "Town": "Big City"}, {"name":"Dom", "age": 15, "Town": "NYC"}, {"name":"Tom", "age": 5} ]
内容的提问来源于stack exchange,提问作者Malvinka
相关产品推荐
相关产品推荐

