Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在列表中快速查找重复的词典?_Python_List_Dictionary - Fatal编程技术网

Python 如何在列表中快速查找重复的词典?

Python 如何在列表中快速查找重复的词典?,python,list,dictionary,Python,List,Dictionary,我有一个字典列表,例如: list_of_clients = [ {"Name": "Alex", "Surname": "Dorfman", ...}, {"Name": "Serge", "Surname": "Ioffe"}, ... ] 我知道同一个客户端的列表中有重复的字典 有没有办法快速打印出来 谢谢 您可以保留一组已看到的名称。您必须定义应该考虑哪些键。在这种情况下:[“姓名”、“姓氏]。如果需要,只需添加更多: list_of_clients = [{"Name

我有一个字典列表,例如:

list_of_clients = [
    {"Name": "Alex", "Surname": "Dorfman", ...},
    {"Name": "Serge", "Surname": "Ioffe"}, ...
]
我知道同一个客户端的列表中有重复的字典

有没有办法快速打印出来


谢谢

您可以保留一组已看到的名称。您必须定义应该考虑哪些键。在这种情况下:
[“姓名”、“姓氏]
。如果需要,只需添加更多:

list_of_clients = [{"Name": "Alex", "Surname": "Dorfman"}, {"Name": "Serge", "Surname": "Ioffe"}, {"Name": "Alex", "Surname": "Dorfman"}, {"Name": "Serge", "Surname": "Ioffe"}]

already_seen = set()

for client in list_of_clients:
    complete_name = tuple(client.get(k) for k in ["Name", "Surname"])
    if complete_name in already_seen:
        print("Duplicate : %s" % (complete_name,))
    already_seen.add(complete_name)
它输出:

Duplicate : ('Alex', 'Dorfman')
Duplicate : ('Serge', 'Ioffe')
您可以尝试:

res = set(tuple(client.items() 
                for client in list_of_clients 
                if list_of_clients.count(client) > 1))
set()
将消除结果中的重复项,并且需要
tuple()
(至少在Python3中是这样),因为items()本身仍然不可散列


正如其他人所提到的,这将无法保持项目的有序,但如果您只想删除重复项,这就足够了。

在这种情况下,重复项的定义是什么?所有键/值对都相同吗?只有
“名称”
“姓名”和
“姓氏”
?你试了什么?@CoryKramer:所有的字典项目都是相同的。问题是,我不认为姓名和姓氏是唯一的关键字
{“Name”:“Alex”,“姓氏”:“Dorfman”,…}
(OP的例子,注意省略号)@Coldspeed还注意到整个语法是不正确的。我的方法很灵活。如果有更多有趣的键,只需添加它们。最好使用
If list\u of_clients.count(client)>1和client not in list\u of_clients
,这样重复项在列表中只出现一次,而不是每次出现。(但不是我的反对票)@Mr.Xcoder
client
总是在
客户列表中,最好使用集合。