首页 > 后端开发 > Python教程 > 如何在保留顺序的同时有效地从 Python 列表中删除重复的字典?

如何在保留顺序的同时有效地从 Python 列表中删除重复的字典?

DDD
发布: 2024-11-30 15:27:10
原创
306 人浏览过

How to Efficiently Remove Duplicate Dictionaries from a Python List While Preserving Order?

从 Python 列表中删除重复的字典

处理字典列表时,通常需要删除共享相同键的重复项 -值对。本文提供了使用 Python 的强大解决方案。

问题陈述:

给定一个字典列表,目标是删除包含相同键和值的字典

解决方案:

为了实现这一点,我们采用两步方法:

  1. 将字典转换为 Hashable元组:
    我们将每个字典转换为一个元组,其中元素是键值对。这一步至关重要,因为字典不可散列,但元组可以。
  2. 使用集合删除重复项:
    我们从元组列表创建一个集合。集合会自动删除重复项,只留下唯一的元组。

为了从唯一的元组重建字典,我们使用字典理解。这是代码片段:

original_list = [{'a': 123}, {'b': 123}, {'a': 123}]

# Convert dictionaries to tuples
tuples = [tuple(d.items()) for d in original_list]

# Remove duplicates using a set
unique_tuples = set(tuples)

# Reconstruct dictionaries
result_list = [dict(t) for t in unique_tuples]

print(result_list)
登录后复制

输出:

[{'a': 123}, {'b': 123}]
登录后复制

保留排序:

如果保留原始字典的顺序至关重要,我们可以使用稍微不同的方法:

  1. 创建一个 Seen 集:
    初始化一个名为 saw 的集来跟踪唯一的元组。
  2. 迭代字典:
    迭代原始列表,对于每个字典,将其转换为元组。如果元组不在可见集合中,则添加它并将字典附加到结果列表中。

代码如下:

original_list = [{'a': 123, 'b': 1234}, {'a': 3222, 'b': 1234}, {'a': 123, 'b': 1234}]

seen = set()
result_list = []

for d in original_list:
    t = tuple(d.items())
    if t not in seen:
        seen.add(t)
        result_list.append(d)

print(result_list)
登录后复制

输出:

[{'a': 123, 'b': 1234}, {'a': 3222, 'b': 1234}]
登录后复制

以上是如何在保留顺序的同时有效地从 Python 列表中删除重复的字典?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板