2011-08-07 64 views
2

有列表的这样的名单:Python列表检索数据

data = [['a','x'], ['b','q'], ['c','z']] 
search = 'c' 
any(e[0] == search for e in data) 

,如果我要检索的第一个出现的另一对SEACH变量(换句话说,我想找回这将返回布尔值,但什么'x'当我搜索'a')?

回答

2

你可以使用一个list comprehension来代替:

>>> search = 'a' 
>>> [item[1] for item in data if item[0] == search] 
<<< ['x'] 

表达过滤的结果,所以只返回第一个元素等于搜索值的项目的右侧部分。

5

您可以使用dict(data)['c']来获得对中的第二个值。

dict(data)从你的配对创建一本词典。请注意,这将返回单个结果,并且不保证返回第一个匹配。但是如果你执行了很多搜索并且你知道你没有重复,那么使用字典会更快。

否则,请使用zeekay的答案。

+1

回复:“......这将是更快地使用一本字典”,假设你创建一次字典并搜索多次,而不是每次都用'dict(data)[search_term]'创建和搜索。 – hughdbrown

+0

@hughdbrown:感谢您的评论,它正在我的脑海中,我正在编辑我的答案来说明这一点。 –

0
>>> 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 
2

如果你只需要第一次出现,那么就不要使用列表理解创建中间表,因为这将搜索整个列表。

相反,使用next()与发电机的表达,这会很快恢复,因为它找到一个匹配:

>>> next(snd for fst, snd in data if fst == 'a') 
'x' 
0
data = [['a','x'], ['b','q'], ['c','z']] 
search = 'c' 

for inner_list in data: 
    if search in inner_list: 
    print(inner_list[1])