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

2 投票
3 回答
4384 浏览
提问于 2025-04-16 03:51

我想测试一个字符串是否出现在一个默认字典中的任何列表值里。

比如说:

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

我想知道'cow'这个词是否出现在动物这个字典里的任何列表中。

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

我希望能得到一个结果,如果有这种情况,就返回“True”。有没有类似的东西:

'cow' in animals.values()  

适用于默认字典的?

谢谢!

3 个回答

-1

这个例子会把列表变成一维的,检查每个元素,然后返回真或假,具体如下:

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

在编程中,有时候我们需要处理一些数据,这些数据可能来自不同的地方,比如用户输入、文件或者网络请求。为了让程序能够理解这些数据,我们通常需要把它们转换成程序可以处理的格式。

比如说,如果我们从一个文件中读取了一些文本数据,程序可能需要把这些文本转换成数字或者其他类型的数据,这样才能进行计算或者其他操作。

这个过程叫做“数据转换”。在不同的编程语言中,数据转换的方式可能会有所不同,但基本的思路都是一样的:把一种类型的数据变成另一种类型,以便程序能够使用。

在进行数据转换时,我们还需要注意数据的有效性和安全性,确保转换后的数据是正确的,不会导致程序出错。

any("cow" in lst for lst in animals.itervalues())
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)

撰写回答