[英]Python find value in dictionary inside a list
我正在尝试使用values()
方法为480-888-0050
返回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 结束
有人可以帮我弄这个吗?
您可以编写一个函数来尝试以不同于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
您的问题是某些值在键中,而其他值在列表中。 使用理解列表作为列表值可以解决问题。 如果你想在 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")
修正了我之前的回答:
'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())
该列表包含['480-888-0050', '480-555-5555']
,而不是'480-888-0050'
因此搜索元素,您需要在子列表中搜索。 用:
print(any('480-888-0050' in sublist for sublist in contacts.values()))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.