我正在尝试使用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结束的过程
有人可以帮我吗?
答案 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()))