Python中无嵌套循环按相同键合并两个字典列表的最优方案
合并两个字典列表的高效方案
你可以通过字典推导式先将两个列表转换为以symbol为键的映射字典,再快速合并对应键的字典,最后转回列表形式。这种方法时间复杂度为O(n)(n为列表元素个数),比嵌套循环更高效,也避免了冗余的显式循环写法。
代码实现
first_list = [ {"symbol": "BTC", "price": 22809}, {"symbol": "ETH", "price": 1626} ] second_list = [ {"symbol": "BTC", "volume": 22809333}, {"symbol": "ETH", "volume": 19809333} ] # 将列表转成以symbol为键的映射字典 first_map = {item["symbol"]: item for item in first_list} second_map = {item["symbol"]: item for item in second_list} # 合并字典并生成最终列表 final_list = [{**first_map[sym], **second_map[sym]} for sym in first_map] print(final_list)
输出结果
[ {"symbol": "BTC", "price": 22809, "volume": 22809333}, {"symbol": "ETH", "price": 1626, "volume": 19809333} ]
关键说明
- 字典推导式能快速把列表转换成键值对结构,让后续通过
symbol直接定位字典的操作变成O(1)时间复杂度。 {**dict1, **dict2}是Python合并字典的简洁写法,会把第二个字典的键值对合并到第一个字典中(这里symbol键值完全一致,不会出现覆盖问题)。- 最后用列表推导式遍历键生成结果,整个过程没有嵌套循环,执行效率远高于嵌套遍历的方案。
内容的提问来源于stack exchange,提问作者Kiarash Fazli
相关产品推荐
相关产品推荐

