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

时间:2013-04-30 08:55:29

标签: python

我有这样的结构:

['a;1,2,3\n', 'b;abc\n', ...]

换句话说:它是List,其中包含以下内容:'id;element1,element2,...\n'

现在我想检查List是否包含id = "b"的元素,如果它包含项"b"我想要返回整个元素:

'b;abc\n'

如何使用python执行此操作?是否可以使用in语句来执行此操作?

4 个答案:

答案 0 :(得分:2)

>>> 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'

答案 1 :(得分:2)

这将返回一个符合您条件的所有项目的列表,我假设它可能有多个结果匹配,如果只有1个结果,结果列表将有1个项目。

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

答案 2 :(得分:1)

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

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')

这给出了列表['b;abc\n']。如果您要求输入不存在的密钥,则结果为空列表。

答案 3 :(得分:0)

其他方式很可能更快。

>>> 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'