小能豆

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

javascript

我有一个字典列表,我想删除具有相同键和值对的字典。

对于此列表:[{'a': 123}, {'b': 123}, {'a': 123}]

我想退掉这个:[{'a': 123}, {'b': 123}]

另一个例子:

对于此列表:[{'a': 123, 'b': 1234}, {'a': 3222, 'b': 1234}, {'a': 123, 'b': 1234}]

我想退掉这个:[{'a': 123, 'b': 1234}, {'a': 3222, 'b': 1234}]


阅读 44

收藏
2024-07-11

共1个答案

小能豆

要去除列表中的重复字典,可以使用一个集合来存储已见过的字典,并利用集合的特性(元素唯一性)来过滤重复项。由于字典是不可哈希的,需要将其转换为可以哈希的形式,例如将字典转换为元组。

以下是一个示例代码,可以实现你想要的功能:

def remove_duplicate_dicts(lst):
    seen = set()
    result = []
    for d in lst:
        # 将字典转换为元组
        items = tuple(d.items())
        if items not in seen:
            seen.add(items)
            result.append(d)
    return result

# 示例1
lst1 = [{'a': 123}, {'b': 123}, {'a': 123}]
print(remove_duplicate_dicts(lst1))  # 输出: [{'a': 123}, {'b': 123}]

# 示例2
lst2 = [{'a': 123, 'b': 1234}, {'a': 3222, 'b': 1234}, {'a': 123, 'b': 1234}]
print(remove_duplicate_dicts(lst2))  # 输出: [{'a': 123, 'b': 1234}, {'a': 3222, 'b': 1234}]

解释:
1. 创建一个空的集合 seen 用于存储已见过的字典项。
2. 创建一个空的列表 result 用于存储结果。
3. 遍历原始列表,将每个字典转换为元组形式,并检查该元组是否在 seen 集合中。
4. 如果元组不在 seen 集合中,则将其添加到 seen 集合和 result 列表中。
5. 返回 result 列表。

2024-07-11