我有一个字典列表,我想删除具有相同键和值对的字典。
对于此列表:[{'a': 123}, {'b': 123}, {'a': 123}]
[{'a': 123}, {'b': 123}, {'a': 123}]
我想退掉这个:[{'a': 123}, {'b': 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}, {'a': 123, 'b': 1234}]
我想退掉这个:[{'a': 123, 'b': 1234}, {'a': 3222, 'b': 1234}]
[{'a': 123, 'b': 1234}, {'a': 3222, 'b': 1234}]
要去除列表中的重复字典,可以使用一个集合来存储已见过的字典,并利用集合的特性(元素唯一性)来过滤重复项。由于字典是不可哈希的,需要将其转换为可以哈希的形式,例如将字典转换为元组。
以下是一个示例代码,可以实现你想要的功能:
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 列表。
seen
result