有列表的这样的名单:Python列表检索数据
data = [['a','x'], ['b','q'], ['c','z']]
search = 'c'
any(e[0] == search for e in data)
,如果我要检索的第一个出现的另一对SEACH变量(换句话说,我想找回这将返回布尔值,但什么'x'当我搜索'a')?
有列表的这样的名单:Python列表检索数据
data = [['a','x'], ['b','q'], ['c','z']]
search = 'c'
any(e[0] == search for e in data)
,如果我要检索的第一个出现的另一对SEACH变量(换句话说,我想找回这将返回布尔值,但什么'x'当我搜索'a')?
你可以使用一个list comprehension来代替:
>>> search = 'a'
>>> [item[1] for item in data if item[0] == search]
<<< ['x']
表达过滤的结果,所以只返回第一个元素等于搜索值的项目的右侧部分。
您可以使用dict(data)['c']
来获得对中的第二个值。
dict(data)
从你的配对创建一本词典。请注意,这将返回单个结果,并且不保证返回第一个匹配。但是如果你执行了很多搜索并且你知道你没有重复,那么使用字典会更快。
否则,请使用zeekay的答案。
>>> data = [['a','x'], ['b','q'], ['c','z']]
>>> search = 'c'
>>> print [e[1] for e in data if e[0] == search]
['z']
真的,不过,你要一本字典:
>>> datadict = {'a':'x', 'b':'q', 'c':'z'}
>>> search = 'c'
>>> print datadict[search]
z
如果你只需要第一次出现,那么就不要使用列表理解创建中间表,因为这将搜索整个列表。
相反,使用next()
与发电机的表达,这会很快恢复,因为它找到一个匹配:
>>> next(snd for fst, snd in data if fst == 'a')
'x'
data = [['a','x'], ['b','q'], ['c','z']]
search = 'c'
for inner_list in data:
if search in inner_list:
print(inner_list[1])
回复:“......这将是更快地使用一本字典”,假设你创建一次字典并搜索多次,而不是每次都用'dict(data)[search_term]'创建和搜索。 – hughdbrown
@hughdbrown:感谢您的评论,它正在我的脑海中,我正在编辑我的答案来说明这一点。 –