Python在列表中的字典中查找值

时间:2020-01-05 13:43:00

标签: python

我正在尝试使用True的{​​{1}}方法返回values(),该方法位于480-888-0050字典内的列表中,但似乎没有进行深入研究在键contacts的列表中。

Mike

输出:

contacts = {
    'Ingemar': '480-555-7777', 
    'Mike': ['480-888-0050', '480-555-5555']
}

print('480-555-7777' in contacts.values())
print('480-888-0050' in contacts.values())

print(contacts.values())

以退出代码0结束的过程

有人可以帮我吗?

4 个答案:

答案 0 :(得分:3)

您可以编写一个函数,尝试以不同于str的方式处理list

def contains(element, value):
    if isinstance(value, str):
        return element == value
    elif isinstance(value, list):
        return element in value
    return False

然后,您可以在带有any的生成器表达式中使用此函数

>>> any(contains('480-555-7777', value) for value in contacts.values())
True
>>> any(contains('480-888-0050', value) for value in contacts.values())
True

答案 1 :(得分:0)

您的问题是某些值在键中,而另一些在列表中。使用理解列表作为列表值可以解决问题。如果要在dict的所有位置测试值,可以执行以下操作:

values = contacts.values()
if '480-888-0050' in [x for v in values for x in v if type(v)==list] or '480-888-0050' in values:
    print("Value found")

答案 2 :(得分:0)

修正了我先前的答案:

“ 480-888-0050”不是列表中的值

['480-555-7777',['480-888-0050','480-555-5555']]

在列表中的列表中提供一个值,如果要检查要合并所有列表的所有可用值,可以执行以下操作:

from itertools import chain

numbers = list(chain.from_iterable(
[l if isinstance(l, list) else [l] for l in contacts.values()]))

print('480-888-0050' in contacts.values())

答案 3 :(得分:-1)

该列表包含['480-888-0050', '480-555-5555'],而不包含'480-888-0050' 因此搜索元素,您需要在子列表中搜索。 使用:

print(any('480-888-0050' in sublist for sublist in contacts.values()))