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

2024-10-02 02:45:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用480-888-0050values()方法返回True,该方法位于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())

输出:

True
False
dict_values(['480-555-7777', ['480-888-0050', '480-555-5555']])  <<< clearly sees the values

进程已完成,退出代码为0

有人能帮我吗


Tags: the方法infalsetrue列表字典dict
3条回答

修正了我之前的答案:

“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())

您的问题是一些值在键中,而另一些值在列表中。使用列表值的理解列表可以实现这个技巧。如果您想在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")

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

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

相关问题 更多 >

    热门问题