我有一个这样的列表,我想做的是我想要所有的值跟随'A'元素。
mylist = [['B', '\n\t\t'], ['A', 'val1'], ['B', '1*'],
['A', 'val2'], ['B', '2'], ['A', 'val3'],
['B', '1'], ['A', 'val4'], ['B', '2'],
['A', 'val5'], ['B', '2'], ['A', 'val6'],
['B', '1'], ['B', '3']]
如果我传递val1
,则输出应为1*
输入
val2
输出
2
输入
val6
输出
13
忽略任何其他条目
我试过这个,但它无法正常工作
tag = "A"
for i in range(len(mylist)):
#print(mylist[i][0])
#print(i)
if mylist[i][1] == tag:
print(mylist[i][1])
for j in range(len(mylist)):
print(i+j+1)
if mylist[i+j][0] != 'A':
print(mylist[i+j][1])
答案 0 :(得分:1)
使用索引处理解决了它
tag = "A"
for i in range(len(mylist)):
#print(mylist[i][0])
#print(len(mylist))
if mylist[i][1] == tag:
print(mylist[i][1])
for j in range(len(mylist)):
#print("index",i+j)
if mylist[i+j][0] != 'A':
print(mylist[i+j][1])
if (i+j+1) >= len(mylist) or mylist[i+j+1][0] == 'A':
break
答案 1 :(得分:1)
您可以使用itertools.groupby
对项目进行分组。然后通过字典理解创建映射。使用itertools.islice
可以避免在第二步中创建新列表。
from itertools import groupby, islice
from operator import itemgetter
lst = [list(j) for _, j in groupby(mylist, key=itemgetter(0))]
res = {i[0][1]: ''.join(map(itemgetter(1), j)) for i, j in
zip(islice(lst, 1, None, 2), islice(lst, 2, None, 2))}
{'val1': '1*',
'val2': '2',
'val3': '1',
'val4': '2',
'val5': '2',
'val6': '13'}