繁体   English   中英

如何检查字典是否在python中的另一个字典中

[英]How to check if a dictionary is in another dictionary in python

我有一个物件

>>> L[0].f.items()
dict_items([('a', 1)])
>>> a3.f.items()
dict_items([('a', 1), ('c', 3)])

我想测试L [0] .f.items()是否是a3.f.items()的子集。 所以我做了以下事情:

>>> L[0].f.items() in a3.f.items()
False

但是我希望L [0] .f.items()是a3.f.items()的子集。 为什么返回False? 如何测试某个词典项目是否为另一个词典项目的子集?

您可以从列表中进行设置,然后查看一个集合是否为另一个的子集:

>>> list1 = [('a', 1), ('c', 3)]
>>> list2 = [('a', 1)]
>>> set(list2).issubset(list1)
True

或者,在您的情况下:

set(L[0].f.items()).issubset(set(a3.f.items()))

您正在检查的是实际列表,而不是元组。 在这里,您可以使用all()

all(i in a3.f.items() for i in L[0].f.items())

甚至设置符号:

>>> set(L[0].f.items()) & set(a3.f.items())) == set(L[0].f.items())
True # Note that without the bool call this returns set([('a', 1)]), which can
     # be useful if you have more than one sublist tuples.

in测试中,左操作数是否是右操作数。 由于dict项视图是类似集合的视图,因此您需要<= ,它可以测试一个是否是另一个的子集:

>>> L[0].f.items() <= a3.f.items()
True

如果要使用列表或其他非类似集合的可迭代对象执行此操作,则可以从一个集合构建一个集合并使用issuperset

>>> more = [1, 2, 3]
>>> less = [1, 2]
>>> set(more).issuperset(less)
True

从Python 2.7开始,您有了dict.viewitems() ,它将为您提供类似集合的行为。 (哦,您似乎也使用了Py3,因为您也有dict_items()对象!)

所以你可以用

a = dict(a=1)
b = dict(a=1, c=3)
ai = a.viewitems() # items() on 3.x
bi = b.viewitems() # items() on 3.x
ai - bi
# gives a set([])
bi - ai
# gives a set([('c', 3)])
ai & bi
# gives ai
ai | bi
# gives bi

要确保a每个元素也都包含在b ,您需要

ai & bi == ai

如果这是假的,有一个元素a缺失b ,“扰乱”了&操作。

编辑:但是它甚至更简单-只是做

ai <= bi

就像您可以在布景上一样。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM