从字典列表中删除重复项

10

我有以下字典列表:

d = [
{ 'name': 'test', 'regions': [{'country': 'UK'}] },
{ 'name': 'test', 'regions': [{'country': 'US'}, {'country': 'DE'}] },
{ 'name': 'test 1', 'regions': [{'country': 'UK'}], 'clients': ['1', '2', '5'] },
{ 'name': 'test', 'regions': [{'country': 'UK'}] },
]

如何最简单地删除列表中的重复项?

我看到了一些解决方案,但只适用于不包含嵌套字典或列表的项。


4
在这里,你所期望的结果是什么? - John Feminella
3
请定义“重复”。您是指重复键、重复值还是重复键和值? - user647772
1
重复的键和值 - pablox
1个回答

25

这个怎么样:

new_d = []
for x in d:
    if x not in new_d:
        new_d.append(x)

我知道这一定是某些简单的东西 :) 谢谢 - pablox
注意:仅当对象是可哈希的时,此方法才有效。dict 对象是不可哈希的,因此如果在包含不可哈希对象的对象上使用此方法,则会出现错误。 - JohnnyUtah
1
@JohnnyUtah 这是不正确的。这可以很好地处理不可哈希对象。 - wim
@wim 请仔细阅读我的声明。我同意这对可哈希对象有效,但如果该可哈希对象包含不可哈希对象,则它将(并且已经)失败。 - JohnnyUtah
1
@JohnnyUtah 你还是错了。即使有嵌套的不可哈希对象,这段代码也能正常工作。事实上,问题中给出的示例就有嵌套的不可哈希对象,并且它已经被证明可以正常工作。 - wim
1
它可以很好地处理不可哈希对象列表 - 在我的情况下是字典,例如:d = [{'a':1,'b':2},{'a':1,'b':2}],set(d) 失败了,而上面的方法可以正常工作。 - Vitaliy Terziev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接