python - 过滤在某个键上具有重复值的字典列表

标签 python dictionary

我有一本字典如下:

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/

相关文章:

python - 正则表达式中字符周围不需要的空格

c# - 如何按值对字典条目列表进行排序(自定义排序)

python - 对字典中的值执行循环移位

python - 从统计文件中构建计数字典

Python 字典 : Creating a prepared statement

python - 使用 pandas 创建 2 个新列并根据日期分配变量

python - 序列化程序返回 "Model object"而不是特定字段

python - Pyqt5:像素图颜色问题

python - 如何将正则表达式转换为 NFA?

python - 是否可以使用 setdefault 嵌套字典,附加到列表中?