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

标签 python list dictionary

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

对于这个列表:[{'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}]

最佳答案

试试这个:

[dict(t) for t in {tuple(d.items()) for d in l}]

策略是将字典列表转换为元组列表,其中元组包含字典项。由于可以对元组进行散列处理,因此您可以使用 set 删除重复项(在此处使用 set comprehension,旧的 python 替代方案将是 set(tuple(d.items( )) for d in l)),然后,使用 dict 从元组重新创建字典。

地点:

  • l 是原始列表
  • d 是列表中的字典之一
  • t 是从字典创建的元组之一

编辑:如果你想保留顺序,上面的单行将不起作用,因为 set 不会这样做。但是,只需几行代码,您也可以做到这一点:

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

seen = set()
new_l = []
for d in l:
    t = tuple(d.items())
    if t not in seen:
        seen.add(t)
        new_l.append(d)

print new_l

示例输出:

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

注意:正如@a​​lexis 所指出的,具有相同键和值的两个字典可能不会产生相同的元组。如果他们经历不同的添加/删除 key 历史,则可能会发生这种情况。如果您的问题属于这种情况,请考虑按照他的建议对 d.items() 进行排序。

关于python - 在 Python 中删除列表中的重复字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9427163/

相关文章:

python - 如何用Python将用户输入转换为列表?

python - 检查列表列表的第一个元素

python - 将 HTML 转换为 CSV

python - 获取多次上传的文件的 Django 生成的唯一名称

string - Scala:如何计算某个索引中唯一项的出现次数?

python - 类型错误 : unhashable type: 'dict' in python

groovy - 将名为 metaClass 的键放入 Map 中

python - 在字典上使用标签编码器

python - 为图形的所有子图关闭轴

python - 使用python将路径文件导入到mysql数据库表