繁体   English   中英

检查单词是否在作为字典值的列表中

[英]Check if a word is in a list that is a value of a dictionary

我正在尝试检查一个单词是否在作为字典值的列表中。 例如,我想检查'noodles'是否在: {1:['hello', 'hallo', 'salut', 'ciao', 'hola'], 2:['eggs', 'noodles', 'bacon']}

我试过:

element = 'noodles'
element in myDict.values()

但我得到: False

您的代码检查element ( 'noodles' ) 是否是字典中的值,而它不是(值是列表)。

您需要检查element是否在每个列表中。

如果你不在乎钥匙:

print(any(element in value for value in myDict.values()))

如果您想知道密钥(这将打印匹配密钥的列表):

print([key for key, value in myDict.items() if element in value])

但是,一般来说,如果您发现自己不得不一遍又一遍地遍历字典,那么您要么对键的内容做出了错误的选择,要么完全使用了错误的数据结构。

这里的dict.values()调用返回一个可迭代的列表。 您需要先展平返回的可迭代对象,以直接进行测试:

from itertools import chain

element = 'noodles'
print(element in chain.from_iterable(my_dict.values())) # -> True

您应该在这里使用一个函数,您可以使用纯 python 来完成,而无需导入任何模块或使其变得更复杂:

数据:

Your_dict={1:['hello', 'hallo', 'salut', 'ciao', 'hola'], 2:['eggs', 'noodles', 'bacon']}
your_word='noodles'

代码:

def find(dict_1,word):
    for words in dict_1.values():
        if word in words:
            return True
    else:
        return False




print(find(Your_dict,your_word))

输出:

True

没有任何 for 循环或模块的单行解决方案:

只是为了好玩

print(list(map(lambda x:x if your_word in x else None,Your_dict.values())))

输出:

[None, ['eggs', 'noodles', 'bacon']]
myDict = {1: ['hello', 'hallo', 'salut', 'ciao', 'hola'], 2: ['eggs', 'noodles', 'bacon']}
element = 'noodles'
[print(True) if element in value else None for value in myDict.values()]

# It will give true if it is present

您可以在generator-expression上使用any()

any("noodles" in v for v in d.values())

在这种情况下,它给出:

True

为什么?

那么d.values()返回字典d中所有值的iterables 所以在这种情况下, d.values()的结果将是:

dict_values([['hello', 'hallo', 'salut', 'ciao', 'hola'], ['eggs', 'noodles', 'bacon']])

然后我们去检查字符串"noodles"是否在这些值( lists )中的任何一个中。

这真的很容易/可读。 我们只是想创建一个完全这样做的generator - 即为每个值返回一个boolean值,指示"noodles"是否在该list

然后,因为我们现在有一个generator ,我们可以使用any() ,它只会为整个生成器返回一个boolean ,指示在迭代它时是否有任何Trues 因此,在我们的案例中,这意味着"noodles"是否在任何values

你应该用循环。它肯定会工作。这是经过测试的代码。

element = 'noodles'
for i in dict1.values():
    if(element in i):
        print(True)
        count+=1
print(count)

Count 将计算您的元素出现的次数。如果它是 0,则该元素在字典的值中不可用,如果它大于 0,则它在字典的值中可用。Count 仅供您参考。

您可以使用dict.items()

s = {1:['hello', 'hallo', 'salut', 'ciao', 'hola'], 2:['eggs', 'noodles', 'bacon']}
element = 'noodles'
if any(element in b for a, b in s.items()):
   pass

myDict.values() 将返回一个列表列表,而不是您可以在 y 上询问 x 的内容,您将无法避免类似于列表列表中的 Python 搜索的某种风格的循环

...除非您觉得这很耗时并决定保留某种散列以包含 myDict.values 中包含的列表中的所有元素。 请注意,对于每次将 l 插入字典中,这将花费 O(len(l)) 。

就我而言,我需要检查该词是否存在于键或值中,这是一个简单的解决方案。 (它可能会帮助某人)

if 'noodle' in str(myDict):
    True
else:
    False

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM