我有这样的结构:
['a;1,2,3\n', 'b;abc\n', ...]
换句话说:它是List
这样的:'id;element1,element2,...\n'
现在我想检查 List 是否包含一个 id = 的元素,"b"
如果它包含"b"
我想返回整个元素的项目:
'b;abc\n'
如何用python做到这一点?是否可以通过in
声明来做到这一点?
我有这样的结构:
['a;1,2,3\n', 'b;abc\n', ...]
换句话说:它是List
这样的:'id;element1,element2,...\n'
现在我想检查 List 是否包含一个 id = 的元素,"b"
如果它包含"b"
我想返回整个元素的项目:
'b;abc\n'
如何用python做到这一点?是否可以通过in
声明来做到这一点?
>>> 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 个结果,结果列表将有 1 个项目。
>>> input = ['a;1,2,3\n', 'b;abc\n']
>>> filter(lambda item:item.find('b;') == 0 ,input)
['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')
这给出了列表['b;abc\n']
。如果您要求一个不存在的键,则结果是空列表。
其他方式很可能更快。
>>> 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'