生成包含python中关键字的字符串的子列表

时间:2014-06-12 05:09:10

标签: python list

嗨我在python脚本中有一个字符串

cp_map = "Valid:\nOP_1\nOP_2\nOP_3\nInvalid:\nOP_4\nOP_5\nUnused:\nOP_6\nOP_7"

在此缓冲区中,我想在关键字“有效”之后分隔关键字之后的参数,例如OP_1,OP_2,OP_3。随后的每组参数必须保存在单独的列表中,例如, OP_4,OP_5必须在另一个列表中,OP_6,OP_7必须在另一个列表中。因此,我需要分离列表并为有效,无效或未使用的操作创建三个单独的列表

我已将字符串转换为列表,方法是将其分隔为'\ n',如

cp_map.split('\n')

所以我得到了清单

cp_map = [u'Valid:', u'OP_1', u'OP_2', u'OP_3', u'Invalids:', u'OP_4'..............]

请帮我创建多个有效,无效和未使用的操作列表。

3 个答案:

答案 0 :(得分:2)

您可以遍历列表并填写所需的子列表,或使用list.index查找关键字“Valid”,“Invalid”,“Unused”的索引,并使用切片表示法来拆分列表:

cp_map = [u'Valid:', u'OP_1', u'OP_2', u'OP_3', u'Invalid', u'OP_4', 'Unused', 'OP_n']
v_map = cp_map[1 : cp_map.index("Invalid")]
i_map = cp_map[cp_map.index("Invalid") + 1 : cp_map.index("Unused")]
u_map = cp_map[cp_map.index("Unused") + 1 : ]

print(v_map, i_map, u_map)

答案 1 :(得分:1)

如果您可以确定结构和关键字:

token = '!*!'
cp_map = "Valid:\nOP_1\nOP_2\nOP_3\nInvalid:\nOP_4\nOP_5\nUnused:\nOP_6\nOP_7"
cp_map = cp_map.replace(':\n',':')
cp_map = cp_map.replace('\nInvalid', token + 'Invalid')
cp_map = cp_map.replace('\nUnused', token + 'Unused')
cp_map = cp_map.replace('\n',',')
cp_map = cp_map.split(token)
y = {key:op.split(',') for key, op in (cp.split(':') for cp in cp_map)}
valid = y['Valid']
unused = y['Unused']
invalid = y['Invalid']

>>> y
{'Unused': ['OP_6', 'OP_7'], 'Valid': ['OP_1', 'OP_2', 'OP_3'], 'Invalid': ['OP_4', 'OP_5']}
>>>

答案 2 :(得分:0)

这是一种方法:

cp_map = "Valid:\nOP_1\nOP_2\nOP_3\nInvalid:\nOP_4\nOP_5\nUnused:\nOP_6\nOP_7"
one_list = cp_map.split('\n')
sub_list, multi_lists = [], []
for item in one_list:
    if 'unused' in item.lower() or 'valid' in item.lower() or 'invalid' in item.lower():
        if sub_list:
            multi_lists.append(sub_list)
        sub_list = []
    sub_list.append(item)
multi_lists.append(sub_list)
print multi_lists

打印

[['Valid:', 'OP_1', 'OP_2', 'OP_3'], ['Invalid:', 'OP_4', 'OP_5'], ['Unused:', 'OP_6', 'OP_7']]