0

我有这样的结构:

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

换句话说:它是List这样的:'id;element1,element2,...\n'

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

'b;abc\n'

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

4

4 回答 4

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'
于 2013-04-30T09:00:46.390 回答
2

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

>>> input = ['a;1,2,3\n', 'b;abc\n']
>>> filter(lambda item:item.find('b;') == 0 ,input)
['b;abc\n']
于 2013-04-30T09:00:48.677 回答
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']。如果您要求一个不存在的键,则结果是空列表。

于 2013-04-30T09:01:18.500 回答
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'
于 2013-04-30T09:08:43.633 回答