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.Xcoderclient
总是在客户列表中,最好使用集合。