检查,如果项目是在列表中,然后返回该项目

问题描述:

我有这样的结构:检查,如果项目是在列表中,然后返回该项目

['a;1,2,3\n', 'b;abc\n', ...] 
换句话说

:这是一个List像这样的项目:'id;element1,element2,...\n'

现在我想检查列表包含了ID = "b"一个元素,如果它cotains项目"b"我想回到整个元素:

'b;abc\n' 

如何用python做到这一点?是否有可能通过in声明来做到这一点?

+2

最近有这么多的列表理解问题。连续四次。这对其他人来说看起来很奇怪吗? – TerryA 2013-04-30 08:56:27

+0

列表理解问题的级别太高了。 – 2013-04-30 08:57:27

+0

我发誓我以前见过这个问题,但也许我想象的还要 – jamylak 2013-04-30 08:58:54

这将返回符合条件的所有物品的清单,我认为它可能有不止一个相匹配的结果,如果只有1条结果,结果列表将有1项。

>>> input = ['a;1,2,3\n', 'b;abc\n'] 
>>> filter(lambda item:item.find('b;') == 0 ,input) 
['b;abc\n'] 
+0

这将检查整个列表,即使它找到的项目 – jamylak 2013-04-30 09:10:30

+0

@jamylak我同意,但我所做的假设,而不是发现第一次发生,OP可能正在寻找一件物品的所有事件。 – DhruvPathak 2013-04-30 09:11:57

+0

啊,那也可以 – jamylak 2013-04-30 09:20:31

>>> L = ['a;1,2,3\n', 'b;abc\n'] 
>>> next((x for x in L if x.partition(';')[0] == 'b'), 'No match') 
'b;abc\n' 

您可以使用下面的函数来提取您的结构匹配的所有元素的列表:

def query(data, key): 
    return [ x for x in data if x.startswith(key + ';') ] 

使用例:

data = [ 
    'a;1,2,3\n', 
    'b;abc\n', 
    'c;4,5,6\n' 
] 
print query(data, 'b') 

这给列表。如果你要求一个不存在的密钥,结果是空的列表。

其他方法最有可能更快。

>>> L = ['a;1,2,3\n', 'b;abc\n'] 
>>> temp = [i.split(';') for i in L] 
>>> ';'.join([x for x in temp if x[0] == 'b'][0]) 
'b;abc\n'