[英]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.