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

嵌套字典中键含另一键完整子串的关联项合并需求

解决方案

核心思路

我们可以分三步搞定这个需求:

  • 先找出所有「基础键」:也就是那些不带Super/Duper/Uber后缀的键,这些键会作为合并后字典的主键
  • 对每个基础键,收集所有同组的关联键(基础键本身 + 带三种后缀的键,只要存在就纳入)
  • 把同组所有字典的内容合并到基础键对应的字典里,最后删掉原来的后缀键

代码实现

def merge_associated_dicts(input_dict):
    # 定义所有允许的后缀类型
    suffixes = ['Super', 'Duper', 'Uber']
    # 复制原字典,避免直接修改原始数据
    merged_dict = input_dict.copy()
    
    # 筛选出所有的基础键:排除那些是「基础键+后缀」形式的键
    base_keys = []
    for key in merged_dict.keys():
        is_base = True
        for suffix in suffixes:
            if key.endswith(suffix):
                # 检查当前键是否是某个已存在的基础键加后缀
                base_candidate = key[:-len(suffix)]
                if base_candidate in merged_dict:
                    is_base = False
                    break
        if is_base:
            base_keys.append(key)
    
    # 遍历每个基础键,合并同组字典
    for base_key in base_keys:
        # 收集当前组的所有有效键
        group_keys = [base_key]
        for suffix in suffixes:
            associated_key = base_key + suffix
            if associated_key in merged_dict:
                group_keys.append(associated_key)
        
        # 合并组内所有字典的内容
        combined_content = {}
        for key in group_keys:
            combined_content.update(merged_dict[key])
        
        # 更新基础键的内容
        merged_dict[base_key] = combined_content
        
        # 删除组内的后缀键(只保留基础键)
        for key in group_keys[1:]:
            del merged_dict[key]
    
    return merged_dict

# 测试用例
original_dict = {
    "item": {"foo": "bar", "fizz": "buzz"},
    "itemSuper": {"boo": "far", "bizz": "fuzz"},
    "itemDuper": {"omg": "wtf", "rofl": "lmao"},
    "thingy": {"a": 1},
    "thingyUber": {"b": 2},
    "standalone": {"x": "y"}
}

result = merge_associated_dicts(original_dict)
print(result)

代码解释

  1. 保护原始数据:先复制输入字典,避免操作过程中修改原数据
  2. 精准识别基础键:通过检查键是否是「基础键+后缀」的形式,排除掉所有带后缀的键,只保留真正的基础键
  3. 动态收集同组键:对每个基础键,自动生成所有可能的后缀组合键,只把存在于字典中的键纳入组内
  4. 合并与清理:用update()方法合并组内所有字典的键值对,完成后删除多余的后缀键,只保留合并后的基础键条目

测试结果

运行代码后输出的结果完全符合需求:

{
    "item": {"foo": "bar", "fizz": "buzz", "boo": "far", "bizz": "fuzz", "omg": "wtf", "rofl": "lmao"},
    "thingy": {"a": 1, "b": 2},
    "standalone": {"x": "y"}
}

不管是带多个后缀的组、单个后缀的组,还是完全独立的键,都能正确处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:56:48