[英]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.