我正在尝试检查单词是否在列表中是否为字典值。
例如,我想检查'noodles'
是否在:
{1:['hello', 'hallo', 'salut', 'ciao', 'hola'], 2:['eggs', 'noodles', 'bacon']}
我尝试过:
element = 'noodles'
element in myDict.values()
但我得到:False
答案 0 :(得分:3)
您的代码会检查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])
但是,一般来说,如果你发现自己不得不一遍又一遍地循环字典,那么你要么做出错误的选择,要么使用错误的数据结构。
答案 1 :(得分:1)
dict.values()
调用此处返回一个可迭代的列表。您需要首先展平返回的迭代,直接测试:
from itertools import chain
element = 'noodles'
print(element in chain.from_iterable(my_dict.values())) # -> True
答案 2 :(得分:1)
你应该在这里使用一个函数,你可以使用纯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']]
答案 3 :(得分:1)
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
答案 4 :(得分:1)
您可以在any()
上使用 generator-expression
:
any("noodles" in v for v in d.values())
,在这种情况下,给出:
True
<强>为什么吗
好d.values()
会返回字典iterables
中所有值的d
。所以在这种情况下,d.values()
的结果将是:
dict_values([['hello', 'hallo', 'salut', 'ciao', 'hola'], ['eggs', 'noodles', 'bacon']])
然后我们检查字符串"noodles"
是否属于这些值中的任何一个(lists
)。
这很容易/可读。我们只想创建一个完全相同的generator
- 即为每个值返回boolean
,表示"noodles"
中是否有list
。
然后,由于我们现在有一个generator
,我们可以使用any()
,只会为整个生成器返回一个boolean
,指示是否有任何Trues
在迭代它时。
那么在我们的情况下,这意味着"noodles"
中是否有values
。
答案 5 :(得分:1)
你应该使用loop.It肯定会工作。这是经过测试的代码。
element = 'noodles'
for i in dict1.values():
if(element in i):
print(True)
count+=1
print(count)
Count将计算元素的出现次数。如果为0,则元素不是 在字典的值中可用,如果它大于0,则它在字典的值中可用.Count仅供您参考。
答案 6 :(得分:1)
您可以使用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
答案 7 :(得分:0)
myDict.values()将返回一个列表列表,而不是你可以在x中查询的内容,你不能避免出现类似于Python search in lists of lists
...除非你发现这个耗时,并决定保留某种散列来包含myDict.values中包含的列表中的所有元素。请注意,每次将l插入字典时,这将采用O(len(l))。
答案 8 :(得分:0)
就我而言,我需要检查该词是否存在于键或值中,这是一个简单的解决方案。 (它可能会帮助某人)
if 'noodle' in str(myDict):
True
else:
False