如何高效对嵌套字典按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
相关产品推荐
相关产品推荐

