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

如何移除defaultdict中列表内的重复字典元素?

移除defaultdict列表中的重复字典元素

问题场景

我使用collections.defaultdict创建了如下对象:

from collections import defaultdict

original_dict = defaultdict(list,
            {'192.168.20.10/32': [{1: 'aaaaa11111\n'},
                                  {2: 'bbbbb11111\n'},
                                  {2: 'bbbbb11111\n'},
                                  {2: 'bbbbb11111\n'},
                                  {2: 'bbbbb11111\n'}],
             '192.168.20.20/32': [{1: 'aaaaa11111\n'},
                                  {2: 'aaaaa11111\n'},
                                  {2: 'bbbbb11111\n'},
                                  {2: 'bbbbb11111\n'},
                                  {2: 'bbbbb11111\n'},
                                  {2: 'bbbbb11111\n'}]})

需要遍历该对象,移除每个列表中的重复字典元素,最终预期结果为:

defaultdict(list,
                {'192.168.20.10/32': [{1: 'aaaaa11111\n'},
                                      {2: 'bbbbb11111\n'}],
                 '192.168.20.20/32': [{1: 'aaaaa11111\n'},
                                      {2: 'bbbbb11111\n'}]})

解决方案

由于字典是不可哈希类型,无法直接用集合去重,我们可以将字典转换为可哈希的排序元组,去重后再转回字典。代码实现如下:

from collections import defaultdict

original_dict = defaultdict(list,
            {'192.168.20.10/32': [{1: 'aaaaa11111\n'},
                                  {2: 'bbbbb11111\n'},
                                  {2: 'bbbbb11111\n'},
                                  {2: 'bbbbb11111\n'},
                                  {2: 'bbbbb11111\n'}],
             '192.168.20.20/32': [{1: 'aaaaa11111\n'},
                                  {2: 'aaaaa11111\n'},
                                  {2: 'bbbbb11111\n'},
                                  {2: 'bbbbb11111\n'},
                                  {2: 'bbbbb11111\n'},
                                  {2: 'bbbbb11111\n'}]})

# 遍历每个IP对应的列表进行去重
for ip in original_dict:
    # 将字典转为排序后的键值对元组,利用集合去重
    unique_items = set(tuple(sorted(d.items())) for d in original_dict[ip])
    # 将元组转回字典,替换原列表
    original_dict[ip] = [dict(item) for item in unique_items]

# 输出结果
print(original_dict)

说明

  • 把字典转成排序后的键值对元组,是为了确保内容完全相同的字典(即使键的顺序不同,通用场景下)能被转换为相同的元组,保证去重的准确性。
  • 集合会自动剔除重复的元组,最后再把元组转回字典,即可得到去重后的列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 00:09:31