Python:测试defaultdict列表中是否存在值

时间:2010-09-08 11:52:53

标签: python list collections dictionary

我想测试一个字符串是否存在于defaultdict的任何列表值中。

例如:

from collections import defaultdict  
animals = defaultdict(list)  
animals['farm']=['cow', 'pig', 'chicken']  
animals['house']=['cat', 'rat']

我想知道“牛”是否出现在动物的任何一个清单中。

'cow' in animals.values()  #returns False

对于像这样的情况,我想要一些会返回“True”的东西。是否相当于:

'cow' in animals.values()  

对于defaultdict?

谢谢!

3 个答案:

答案 0 :(得分:12)

在这种情况下,

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)

答案 1 :(得分:0)

any("cow" in lst for lst in animals.itervalues())

答案 2 :(得分:-1)

此示例将展平列表,检查每个元素并返回True或False,如下所示:

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