我有一本字典如下:
dic=[{'a':1,'b':2,'c':3},{'a':9,'b':2,'c':2},{'a':5,'b':1,'c':2}]
我想过滤掉那些具有某些键重复值的字典,例如在本例中,键“b”在列表中的第一个和第二个字典中具有重复的值。我想删除第二个条目
很简单,我希望过滤后的列表如下所示:
filt_dic=[{'a':1,'b':2,'c':3},{'a':5,'b':1,'c':2}]
有没有Pythonic的方法来做到这一点?
最佳答案
使用另一个字典(或 defaultdict
)来跟踪您已经看到的键的值。该字典将为原始字典的每个键保存一个集合
(用于快速查找)。
dic=[{'a':1,'b':2,'c':3},{'a':9,'b':2,'c':2},{'a':5,'b':1,'c':2}]
seen = defaultdict(set)
filt_dic = []
for d in dic:
if not any(d[k] in seen[k] for k in d):
filt_dic.append(d)
for k in d:
seen[k].add(d[k])
print(filt_dic)
之后,filt_dic
为[{'a': 1, 'c': 3, 'b': 2}, {'a': 5, 'c': 2 , 'b': 1}]
和 seen
是 {'a': set([1, 5]), 'c': set([2, 3] ), 'b': set([1, 2])})
.
关于python - 过滤在某个键上具有重复值的字典列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36067699/