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

如何检测字典键是否存在于其他键的集合值中并合并对应值?

字典集合值的合并实现方案

需求说明

给定一个值为集合类型的字典,若某个键k存在于另一个键m对应的集合中,则将k的集合值合并到m的集合里;若合并后产生新的包含关系,需重复此操作直到没有可合并的情况。

比如原字典:

{'0': {'3', '1', '0'}, '3': {'3', '1', '4'}, '1': {'2', '1', '0'}, '5': {'3', '5'}}

处理后得到:

{0: {0, 1, 2, 3, 4}, 1: {0, 1, 2, 3}, 3: {0, 1, 2, 3, 4}, 5: {1, 3, 4, 5}}

实现代码

def merge_dict_sets(input_dict):
    # 复制原字典,避免修改原始数据
    merged_dict = {k: v.copy() for k, v in input_dict.items()}
    changed = True
    
    # 循环处理直到没有合并操作发生(处理连锁包含关系)
    while changed:
        changed = False
        # 提前获取当前所有键的列表,防止循环中字典结构变化引发异常
        current_keys = list(merged_dict.keys())
        
        for key in current_keys:
            for other_key in current_keys:
                if key == other_key:
                    continue
                # 检查当前键是否在另一个键的集合中,且未完全合并
                if key in merged_dict[other_key] and not merged_dict[key].issubset(merged_dict[other_key]):
                    merged_dict[other_key].update(merged_dict[key])
                    changed = True
    
    # 可选:将字符串键转为整数(匹配示例输出格式)
    return {int(k): v for k, v in merged_dict.items()}

# 测试示例
original = {'0': {'3', '1', '0'}, '3': {'3', '1', '4'}, '1': {'2', '1', '0'}, '5': {'3', '5'}}
result = merge_dict_sets(original)
print(result)

代码解释

  1. 字典复制:先复制原字典,避免修改原始输入数据。
  2. 循环控制:用changed标志位判断是否需要继续循环——只要有合并操作发生,就重新遍历检查新的包含关系。
  3. 键列表预取:每次循环前先获取当前所有键的列表,防止遍历过程中字典结构变化导致的迭代异常。
  4. 合并逻辑:遍历每对不同的键,若key存在于other_key的集合中,且key的集合未完全包含在other_key的集合里,就执行合并操作。
  5. 类型转换:最后可选将字符串键转为整数,匹配示例的输出格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 20:30:26