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

如何高效对嵌套字典按Name与Age键去重?

高效去除嵌套字典中重复项的方法

问题场景

我有一个嵌套字典结构,示例如下:

my_dictionary = {
    "0": {"Name": "Nick", "Age": 39, "Country": "UK"},
    "1": {"Name": "Steve", "Age": 19, "Country": "Spain"},
    "2": {"Name": "Dave", "Age": 23, "Country": "UK"},
    "3": {"Name": "Nick", "Age": 39, "Country": "Hong Kong"},
    "4": {"Name": "Nick", "Age": 39, "Country": "France"},
}

需要移除其中Name和Age值均相同的重复项,保留任意一个即可(即使Country不同,只要Name和Age重复就需去重)。示例输出如下:

{'0': {'Name': 'Nick', 'Age': 39, 'Country': 'UK'},
 '1': {'Name': 'Steve', 'Age': 19, 'Country': 'Spain'},
 '2': {'Name': 'Dave', 'Age': 23, 'Country': 'UK'}}

当前数据量达几百万条,求简单高效的实现方法。

高效实现方案

针对百万级数据,要保证O(n)的时间复杂度,核心思路是用集合记录已出现过的(Name, Age)组合,遍历字典时只保留首次出现的项。

实现代码

def deduplicate_nested_dict(original_dict):
    seen = set()
    result = {}
    for key, value in original_dict.items():
        # 生成用于判重的唯一标识元组
        identifier = (value["Name"], value["Age"])
        if identifier not in seen:
            seen.add(identifier)
            result[key] = value
    return result

# 测试示例
my_dictionary = {
    "0": {"Name": "Nick", "Age": 39, "Country": "UK"},
    "1": {"Name": "Steve", "Age": 19, "Country": "Spain"},
    "2": {"Name": "Dave", "Age": 23, "Country": "UK"},
    "3": {"Name": "Nick", "Age": 39, "Country": "Hong Kong"},
    "4": {"Name": "Nick", "Age": 39, "Country": "France"},
}

deduplicated = deduplicate_nested_dict(my_dictionary)
print(deduplicated)

方案细节

  • 时间效率:O(n),n为字典的键值对数量,每个元素仅遍历一次,集合的查询和添加操作平均时间复杂度为O(1),适合百万级数据处理。
  • 空间占用:O(k),k为唯一的(Name, Age)组合数量,远小于原始数据量,内存消耗可控。
  • 灵活调整:如果需要保留最后出现的重复项,只需将遍历顺序改为reversed(original_dict.items())即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 01:01:14