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

时间:2017-12-03 15:31:58

标签: python python-3.x list dictionary

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

我尝试过:

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

但我得到:False

9 个答案:

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