2016-03-29 37 views
-3

我有一个+/- 2000条目的列表。Python查找并返回列表

List = [('911', 'Line10', 'Pol87'), 
     ('4568', 'Line289', 'Pol022'), 
     ('4522', 'Line83', 'Pol45')] 

需要获得所述由

>>>line = search_line(911) 
Line10 

>>>Pol = search_Pol(4522) 
Pol45 

多次调用第一小区 可以迅速且无功能处理所需的值?

+0

一般规则:如果您不明白如何**继续**,请到StackOverflow询问。如果你不知道如何开始**,那么你就错了。这不是一个问题 - 这是一个考虑不周的规范/要求清单,然后是要求它被出色地执行。如果我想要的话,我会和我的老板谈谈。 –

回答

1

一个简单的列表理解就足以让所有的值:

>>> List = [('911', 'Line10', 'Pol87'), 
...   ('4568', 'Line289', 'Pol022'), 
...   ('4522', 'Line83', 'Pol45')] 
>>> [t[1] for t in List if t[0]=='911'] 
['Line10'] 
>>> [t[2] for t in List if t[0]=='4522'] 
['Pol45'] 
>>> 
0

最简单的方法:

>>> lst = [('911', 'Line10', 'Pol87'), ('4568', 'Line289', 'Pol022'), ('4522', 'Line83', 'Pol45')] 
>>> filter(lambda x: x[0] == '911', lst)[0][1] 
'Line10' 

或者:

def search_line(lst, key): 
    for item in lst: 
     if item[0] == key: 
      return item[1] 

print search_line(lst, '911') 

输出:

Line10 
+0

当您将它们与lambda进行配对时,过滤器效率相当低。我不知道2000年是否足够真正感受到这一点,但这是值得注意的。 –