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?

谢谢!

+0

不要让'defaultdict'混淆你。如果你有一个常规的'dict',你仍然会遇到同样的问题。 'animals.values()'是列表的列表,而不是字符串列表。 – 2010-09-08 11:56:59

+0

是的,确实如此。谢谢您的帮助。 – Jake 2010-09-08 12:31:05

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())