按所有键唯一的键排序列表

2 python sorting dictionary list

用这个把头发拉出来.

我有一个字典列表,没有每个唯一条目的唯一主ID键(字典是动态构建的):

dicts = [{'firstname': 'john', 'lastname': 'doe', 'code': 'crumpets'},
         {'firstname': 'john', 'lastname': 'roe', 'code': 'roe'},
         {'firstname': 'john', 'lastname': 'doe', 'code': 'crumpets'},
         {'firstname': 'thom', 'lastname': 'doe', 'code': 'crumpets'},
]
Run Code Online (Sandbox Code Playgroud)

如何删除列表中的任何重复{}被删除的字典列表?因此,我需要检查所有三个字典键是否与列表中的另一个字典键匹配...然后从dictif if check that中丢弃该字典键.

因此,对于上面的示例,需要删除第一个和第三个"条目",因为它们是重复的.

Mos*_*oye 5

你从dicts中使用create frozensets并将它们放在一个集合中以删除dupes:

dcts = [dict(d) for d in set(frozenset(d.items()) for d in dcts)]
print(dcts)
Run Code Online (Sandbox Code Playgroud)
[{'code': 'roe', 'firstname': 'john', 'lastname': 'roe'},
 {'code': 'crumpets', 'firstname': 'thom', 'lastname': 'doe'},
 {'code': 'crumpets', 'firstname': 'john', 'lastname': 'doe'}]
Run Code Online (Sandbox Code Playgroud)

如果您选择删除重复项的所有条目,则可以使用计数器:

from collections import Counter

dcts = [dict(d) for d, cnt in Counter(frozenset(d.items()) for d in dcts).items() 
                                                                      if cnt==1]
print(dcts)
Run Code Online (Sandbox Code Playgroud)
[{'code': 'roe', 'firstname': 'john', 'lastname': 'roe'},
 {'code': 'crumpets', 'firstname': 'thom', 'lastname': 'doe'}]
Run Code Online (Sandbox Code Playgroud)