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中丢弃该字典键.
因此,对于上面的示例,需要删除第一个和第三个"条目",因为它们是重复的.
你从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)