Python 如何使用dict的子集筛选dict列表?

Python 如何使用dict的子集筛选dict列表?,python,dictionary,subset,Python,Dictionary,Subset,我正试图找到所有的dict,其中包括我准备好的dict作为一个子集。我有一个有2个键的dict,列表中有5个dict。我正在尝试过滤包括我的dict在内的所有dict,如下所示: my_dict = {'A':'A','B':'B'} all_dict = [{'A':'A','B':'B','C':'C'},{'A':'A','B':'B','C':'C','D':'D'},{'D':'D','E':'E'},{'A':'A','B':'B'},{'A':'A','D':'D'}] res

我正试图找到所有的dict,其中包括我准备好的dict作为一个子集。我有一个有2个键的dict,列表中有5个dict。我正在尝试过滤包括我的dict在内的所有dict,如下所示:

my_dict = {'A':'A','B':'B'}

all_dict = [{'A':'A','B':'B','C':'C'},{'A':'A','B':'B','C':'C','D':'D'},{'D':'D','E':'E'},{'A':'A','B':'B'},{'A':'A','D':'D'}]

result = []
for i in all_dict:
    if my_dict in i:
       result.append(i)

print(result)

#print output empty list

#output supposed to:
#{'A': 'A', 'B': 'B', 'C': 'C'}
#{'A': 'A', 'B': 'B', 'C': 'C', 'D': 'D'}
#{'A': 'A', 'B': 'B'}


根据我的for循环,如果dict与迭代完全相同,它会追加。我如何找到所有的dict(包括我的dict)作为子集?您的建议是什么?

您可以定义一个函数来测试字典
dict\u 1
是否是
dict\u 2
的子集:

def是一个子集(dict_1,dict_2):
对于dict_1.items()中的k,v:
如果k不在dict_2或dict_2[k]中=五:
返回错误
返回真值
然后,您的代码变成:

my_dict={'A':'A','B':'B'}
全称=[{'A':'A','B':'B','C':'C'},{'A':'A','B':'B','C':'C','D':'D'},{'D':'D','E':'E'},{'A':'A','B':'B'},{'A':'A','D':'D']
结果=[]
对于我来说,在所有方面:
如果是子集(我的字典,i):
结果.追加(i)
打印(结果)

您可以定义一个函数来测试字典
dict_1
是否是
dict_2
的子集:

def是一个子集(dict_1,dict_2):
对于dict_1.items()中的k,v:
如果k不在dict_2或dict_2[k]中=五:
返回错误
返回真值
然后,您的代码变成:

my_dict={'A':'A','B':'B'}
全称=[{'A':'A','B':'B','C':'C'},{'A':'A','B':'B','C':'C','D':'D'},{'D':'D','E':'E'},{'A':'A','B':'B'},{'A':'A','D':'D']
结果=[]
对于我来说,在所有方面:
如果是子集(我的字典,i):
结果.追加(i)
打印(结果)

您可以使用列表理解,对于列表中的每个词典,查看my_dict的键是否是词典键的
子集:

[所有目录中的每个目录如果已设置(我的目录).issubset(每个)]
#输出:
[{'A':'A','B':'B','C':'C'},{'A':'A','B':'B','C':'C','D':'D'},{'A':'A','B':'B'}]

您可以使用列表理解,对于列表中的每个词典,查看my_dict的键是否是词典键的
子集:

[所有目录中的每个目录如果已设置(我的目录).issubset(每个)]
#输出:
[{'A':'A','B':'B','C':'C'},{'A':'A','B':'B','C':'C','D':'D'},{'A':'A','B':'B'}]

没有
issubset()的示例

尝试使用
all()


示例中没有
issubset()

尝试使用
all()


使用以下事实:
dict.items()
返回一个类似集合的对象,可以这样比较:

result = [x for x in all_dict if my_dict.items() <= x.items()]

result=[x代表x如果我的dict.items()使用这样一个事实,即
dict.items()
返回一个类似集合的对象,可以这样比较:

result = [x for x in all_dict if my_dict.items() <= x.items()]


result=[x代表所有目录中的x,如果我的目录项()这有点让人困惑你想要实现什么。你只是把所有的dict复制到结果中并打印了列表。还有,输出有什么特别之处?所有的元素都打印在单独的行中。这就是你想要做的吗?如果我的dict是I的子集,我不知道如何返回true。我不知道是什么方法。这有点让你困惑想要实现。您只需将所有内容复制到结果并打印列表。此外,输出有什么特殊之处?所有元素都以单独的行打印。这就是您想要做的吗?如果我的内容是I的子集,我不知道如何返回true。我不知道该方法是什么。我知道该方法,但我的内容中有近20个键我可能遗漏了一些东西,但我不明白这是一个问题。你能澄清一下吗?我知道这个方法,但我的字典里有将近20个键。我可能遗漏了一些东西,但我不明白为什么这是一个问题。你能澄清一下吗?我找不到issubset方法。最后非常感谢你。这就是我想要的全部。只有可用的对于
集合
哦,正因为如此,我找不到。非常感谢。这是一个非常简单的方法。我找不到issubset方法。最后非常感谢。这就是我想要的。它仅适用于
集合
哦,正因为如此,我找不到。非常感谢。这是一个非常简单的方法。issubset方法适用于“我有更多的理由。谢谢。@Murat:
@martineau因为我有将近2gb的数据要过滤,所以我会尝试两种方法。谢谢。@Murat:这对
issubset方法的工作有什么影响,但是这个方法更有意义。谢谢。@Murat:
@martineau因为我有将近2gb的数据要过滤,所以我会尝试两种方法。谢谢。@Murat:怎么办?”与