Python:测试值是否存在于defaultdict列表中
问题描述:
我想测试一个字符串是否存在于defaultdict中的任何列表值中。Python:测试值是否存在于defaultdict列表中
例如:
from collections import defaultdict
animals = defaultdict(list)
animals['farm']=['cow', 'pig', 'chicken']
animals['house']=['cat', 'rat']
我想知道,如果“牛”在任何动物中列出的发生。
'cow' in animals.values() #returns False
我想要的东西,将返回这样的情况“真”。是否有相当于:
'cow' in animals.values()
for defaultdict?
谢谢!
答
defaultdict在这种情况下与常规字典没有什么不同。您需要遍历值的字典:
any('cow' in v for v in animals.values())
或多个程序上:
def in_values(s, d):
"""Does `s` appear in any of the values in `d`?"""
for v in d.values():
if s in v:
return True
return False
in_values('cow', animals)
答
这个例子将压平的列表,检查每个元素,如下将返回真或假:
>>> from collections import defaultdict
>>> animals = defaultdict(list)
>>> animals['farm']=['cow', 'pig', 'chicken']
>>> animals['house']=['cat', 'rat']
>>> 'cow' in [x for y in animals.values() for x in y]
True
答
any("cow" in lst for lst in animals.itervalues())
不要让'defaultdict'混淆你。如果你有一个常规的'dict',你仍然会遇到同样的问题。 'animals.values()'是列表的列表,而不是字符串列表。 – 2010-09-08 11:56:59
是的,确实如此。谢谢您的帮助。 – Jake 2010-09-08 12:31:05