我有以下字典:
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
)来跟踪您已经看到了哪些键的值。该词典将为set
原始字典的每个键保留一个(用于快速查找)。
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])})
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句