导读:本期聚焦于小伙伴创作的《如何在Python中删除三层嵌套字典中最里层值为相同字典的键?》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何在Python中删除三层嵌套字典中最里层值为相同字典的键?》有用,将其分享出去将是对创作者最好的鼓励。

三层嵌套字典的结构通常为外层字典的value是中层字典,中层字典的value是里层字典,我们需要处理的是里层字典中值为相同字典的键,删除重复值对应的键只保留其中一个。

如何在Python中删除三层嵌套字典中最里层值为相同字典的键?

需求场景说明

假设我们有如下结构的三层嵌套字典,里层字典layer3中有两个键bd的值都是{"x": 1, "y": 2},我们的目标是删除其中一个键,只保留一个:

# 示例三层嵌套字典
data = {
    "a": {
        "a1": {
            "b": {"x": 1, "y": 2},
            "c": {"x": 3, "y": 4},
            "d": {"x": 1, "y": 2}
        }
    }
}

实现思路

要实现删除最里层值为相同字典的键,核心步骤如下:

  • 先遍历外层字典,获取所有中层字典
  • 遍历每个中层字典,获取其对应的里层字典
  • 遍历里层字典的键值对,记录每个值对应的键列表
  • 对每个值对应的键列表,只保留第一个键,删除其余键

注意事项

判断两个字典是否相同时,不能直接用is判断,因为is判断的是对象是否为同一个,而我们需要的是值完全相同。如果里层字典的值是可变对象,需要注意修改时的影响,建议先复制值再判断,避免误改原数据。

完整实现代码

下面是完整的实现代码,包含遍历和删除逻辑:

def remove_same_value_keys(nested_dict):
    # 遍历外层字典
    for outer_key in nested_dict:
        middle_dict = nested_dict[outer_key]
        # 遍历中层字典
        for middle_key in middle_dict:
            inner_dict = middle_dict[middle_key]
            # 用来记录值对应的键列表,key为字典的元组形式(因为字典不可哈希,转成元组存储)
            value_to_keys = {}
            # 先收集所有键值对,避免遍历时修改字典报错
            items = list(inner_dict.items())
            for inner_key, inner_value in items:
                # 将字典转成可哈希的元组形式作为key
                value_tuple = tuple(inner_value.items())
                if value_tuple not in value_to_keys:
                    value_to_keys[value_tuple] = [inner_key]
                else:
                    value_to_keys[value_tuple].append(inner_key)
            # 删除重复值对应的键,只保留第一个
            for key_list in value_to_keys.values():
                if len(key_list) > 1:
                    for del_key in key_list[1:]:
                        del inner_dict[del_key]
    return nested_dict

# 测试示例
data = {
    "a": {
        "a1": {
            "b": {"x": 1, "y": 2},
            "c": {"x": 3, "y": 4},
            "d": {"x": 1, "y": 2}
        }
    },
    "e": {
        "e1": {
            "f": {"m": 5},
            "g": {"m": 5},
            "h": {"n": 6}
        }
    }
}

result = remove_same_value_keys(data)
print(result)

代码说明

代码中先将里层字典的键值对转成列表再遍历,避免在遍历过程中修改字典导致报错。因为字典本身是不可哈希的,所以将字典的键值对转成元组作为value_to_keys的键,这样就能准确判断两个字典的值是否完全相同。最后对每个值对应的键列表,只保留第一个,删除后面的重复键,实现需求效果。

运行上述代码后,输出结果中里层字典中值为相同字典的键会被删除,只保留第一个,比如原来的bd都对应{"x":1,"y":2},处理后只会保留其中一个。

Python嵌套字典字典删除键值判断修改时间:2026-06-02 22:35:55

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。