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

Python字典多键列表去重并生成新字典的实现求助

解决Python字典多列表去重并记录删除项的问题

嘿,我来帮你搞定这个字典去重的需求!先看看你现有代码的问题:你当前的循环逻辑只是在检查后续列表里是否存在当前值,但既没有执行实际的删除操作,也没系统记录哪些键包含了重复项。咱们换个更清晰的思路来实现你要的功能——先统计每个值的出现位置,再基于这个统计结果生成目标字典。

完整实现代码

# 原始字典
d = {'x1': ['P1', 'P2', 'P3', 'P4', 'P5'], 
     'x2': ['P1', 'P2', 'P6', 'P7', 'P8'], 
     'x3': ['P1', 'P2', 'P6', 'P9', 'P10']}

# 1. 统计每个值对应的所有键
value_to_keys = {}
for key, values in d.items():
    for val in values:
        if val not in value_to_keys:
            value_to_keys[val] = []
        value_to_keys[val].append(key)

# 2. 筛选出重复值(出现次数>1的),同时保留对应的键列表
duplicate_values = {val: keys for val, keys in value_to_keys.items() if len(keys) > 1}

# 3. 生成修改后的字典和删除项字典
d_mod = {}
for key, values in d.items():
    # 保留仅在当前键出现的值(即不在重复值列表里的元素)
    d_mod[key] = [val for val in values if val not in duplicate_values]

d_deleted_items = duplicate_values

# 输出结果
print("修改后的字典:")
print(d_mod)
print("\n删除项字典:")
print(d_deleted_items)

代码运行结果

修改后的字典:
{'x1': ['P3', 'P4', 'P5'], 'x2': ['P7', 'P8'], 'x3': ['P9', 'P10']}

删除项字典:
{'P1': ['x1', 'x2', 'x3'], 'P2': ['x1', 'x2', 'x3'], 'P6': ['x2', 'x3']}

思路解释

  • 统计值的位置:第一步遍历整个字典,把每个值对应的所有键都记录下来,这样我们能清晰知道每个值在哪些键的列表里出现过。
  • 筛选重复值:从统计结果里挑出那些出现次数超过1次的值,这些就是需要被删除的项,它们对应的键列表正好是我们需要记录的删除项信息。
  • 生成目标字典:遍历原字典的每个列表,只保留那些仅在当前键出现的元素(也就是不在重复值列表里的元素),得到修改后的字典d_mod;而筛选出的重复值字典直接作为d_deleted_items即可。

这种方法逻辑清晰,效率也更高,相比你原来的嵌套循环,避免了重复检查的冗余操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 13:52:51