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

如何识别并移除字典内值重复的嵌套字典?

移除嵌套字典中的重复条目

给你两种简单可行的方法,帮你去掉字典里重复的嵌套条目:

方法一:构建新字典,保留首次出现的条目

核心思路是用一个集合记录已经见过的嵌套字典内容,遍历原字典时只把第一次出现的条目加入新字典:

people = {1: {'name': 'John R. Smith', 'age': '27', 'sex': 'Male'},
          2: {'name': 'Marie', 'age': '22', 'sex': 'Female'},
          3: {'name': 'Mariah', 'age': '32', 'sex': 'Female'},
          4: {'name': 'John R. Smith', 'age': '27', 'sex': 'Male'}}

# 用来记录已经处理过的嵌套字典内容
seen = set()
new_people = {}

for key, info in people.items():
    # 把嵌套字典转成可哈希的元组(按键排序,确保内容相同的字典转成的元组一致)
    info_tuple = tuple(sorted(info.items()))
    if info_tuple not in seen:
        seen.add(info_tuple)
        new_people[key] = info

print(new_people)

运行后new_people里就只保留了键1、2、3的内容,键4的重复条目被自动跳过。

方法二:直接修改原字典,删除重复项

如果不想新建字典,想直接在原字典上操作,记得遍历键的副本(避免遍历中字典结构变化报错):

people = {1: {'name': 'John R. Smith', 'age': '27', 'sex': 'Male'},
          2: {'name': 'Marie', 'age': '22', 'sex': 'Female'},
          3: {'name': 'Mariah', 'age': '32', 'sex': 'Female'},
          4: {'name': 'John R. Smith', 'age': '27', 'sex': 'Male'}}

seen = set()

# 遍历原字典键的副本,防止删除键时打乱遍历流程
for key in list(people.keys()):
    info = people[key]
    info_tuple = tuple(sorted(info.items()))
    if info_tuple in seen:
        del people[key]
    else:
        seen.add(info_tuple)

print(people)

说说你之前方法失败的原因

  • 直接按键对比报错:大概率是你误把字典当列表用索引(比如用people[0]而不是people[1]),或者遍历逻辑没处理好,导致索引错误。
  • 转列表后对比无进展:你转成的列表结构不对(比如把整个字典包成一个列表元素),没法逐个对比嵌套字典的内容。
  • 转DataFrame报错:嵌套字典直接转DataFrame结构不匹配,得先把结构扁平化,再用pandas去重,示例代码如下:
import pandas as pd

people = {1: {'name': 'John R. Smith', 'age': '27', 'sex': 'Male'},
          2: {'name': 'Marie', 'age': '22', 'sex': 'Female'},
          3: {'name': 'Mariah', 'age': '32', 'sex': 'Female'},
          4: {'name': 'John R. Smith', 'age': '27', 'sex': 'Male'}}

# 扁平化结构:把外层键作为id列,内层字典的键作为数据列
df = pd.DataFrame.from_dict(people, orient='index').reset_index().rename(columns={'index': 'id'})
# 按name、age、sex去重,保留首次出现的行
df_unique = df.drop_duplicates(subset=['name', 'age', 'sex'], keep='first')
# 转回原字典结构
new_people = df_unique.set_index('id').to_dict('index')

print(new_people)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 11:01:02