You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python:基于指定键合并扁平化字典列表,以列表2内容优先

优化字典列表合并方案

问题描述

我有两个结构相同的字典列表,需要将它们扁平化合并为一个字典,规则如下:

  • 以第二个列表(product_mapping)的内容为优先(键重复时,用第二个列表的值覆盖第一个)
  • 用原字典中RealField的值作为新字典的键,SuppliedField的值作为对应值

现有代码可运行,但希望用更简洁的推导式实现,求更优方案。

现有实现代码

import operator

default = [
    {"RealField": "SourceIP",   "SuppliedField": "src"},
    {"RealField": "DestinationIP", "SuppliedField": "dst"},
    {"RealField": "Direction", "SuppliedField": "dir"}
]

product_mapping = [
    {"RealField": "SourceIP",   "SuppliedField": "src2"},
    {"RealField": "DestinationIP",   "SuppliedField": "dst2"},
    {"RealField": "NEW",   "SuppliedField": "newvalue"},
]


def dictionary_from_mappings(default_mapping, product_mapping):
    default = [{i["RealField"]:i["SuppliedField"]} for i in default_mapping]
    default_flat = reduce(operator.ior, default, {})
    
    product = [{i["RealField"]:i["SuppliedField"]} for i in product_mapping]
    product_flat = reduce(operator.ior, product, {})
    return default_flat | product_flat

mappings = dictionary_from_mappings(default, product_mapping)
print(mappings)

运行输出:

{'SourceIP': 'src2', 
 'DestinationIP': 'dst2', 
 'Direction': 'dir', 
 'NEW': 'newvalue'
}

更优实现方案

可以直接用字典推导式生成完整字典,再利用字典合并操作符|完成合并,无需借助reduce和operator.ior,代码更简洁直观:

default = [
    {"RealField": "SourceIP",   "SuppliedField": "src"},
    {"RealField": "DestinationIP", "SuppliedField": "dst"},
    {"RealField": "Direction", "SuppliedField": "dir"}
]

product_mapping = [
    {"RealField": "SourceIP",   "SuppliedField": "src2"},
    {"RealField": "DestinationIP",   "SuppliedField": "dst2"},
    {"RealField": "NEW",   "SuppliedField": "newvalue"},
]

def dictionary_from_mappings(default_mapping, product_mapping):
    # 一步生成完整字典,省去拆分小字典再合并的冗余步骤
    default_dict = {item["RealField"]: item["SuppliedField"] for item in default_mapping}
    product_dict = {item["RealField"]: item["SuppliedField"] for item in product_mapping}
    # 合并时product_dict的键自动覆盖default_dict的同名键,符合优先级要求
    return default_dict | product_dict

mappings = dictionary_from_mappings(default, product_mapping)
print(mappings)

优化点说明

  1. 简化流程:直接从列表生成完整字典,避免了先创建单键小字典再合并的多余步骤
  2. 可读性提升:逻辑清晰直观,无需额外理解reduce和ior的作用
  3. 性能优化:减少多次字典合并操作,直接生成目标字典后一次合并,效率更高

如果追求极致简洁,也可以将函数写成一行(可读性略有下降):

def dictionary_from_mappings(default_mapping, product_mapping):
    return {i["RealField"]: i["SuppliedField"] for i in default_mapping} | {i["RealField"]: i["SuppliedField"] for i in product_mapping}

内容的提问来源于stack exchange,提问作者Neil Walker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 06:52:52