如何将所有子列表的索引0处的字符串拆分为单独的元素,并将每个拆分元素包含在原始子列表的副本中?
例如:
Original_List = [['a,b','c','d','e','f'],['1','2','3'],['z,y','1','2']]
期望的结果:
Desired_List = [['a','c','d','e','f'],['b','c','d','e','f'],['1','2','3'],['z','1','2'],['y','1','2']]
此外,再添加一个实际例子:
Original_List = [['Contract_ID1,Contract_ID2','Amount','Date'],['Contract_ID3,Contract_ID4','400','Jan1']]
我希望每个子列表只有一个Contract_ID,但仍然有与之关联的金额和日期
Desired_List = [['Contract_ID1','Amount','Date'],['Contract_ID2','Amount','Date'],['Contract_ID3','400','Jan1'],['Contract_ID4','400','Jan1']]
我可以用下面的方法拆分所有子列表的索引0处的所有字符串,但是我无法弄清楚如何为每个拆分元素复制整个列表然后替换用split元素拆分的字符串,所以每个split元素都有自己的列表。
Split_First_Indices_of_Sublists = map(lambda x: x[0].split(","),Original_List)
>>[['a', 'b'], ['1'], ['z', 'y']]
for x in Original_List:
x.pop(0)
>> [['c', 'd', 'e', 'f'], ['2', '3'], ['1', 2]]
答案 0 :(得分:3)
我认为它最明确地写为显式循环:
Desired_List = []
for li in Original_List:
for spl in li[0].split(','):
Desired_List.append([spl] + li[1:])
给出:
Desired_List
Out[153]:
[['a', 'c', 'd', 'e', 'f'],
['b', 'c', 'd', 'e', 'f'],
['1', '2', '3'],
['z', '1', '2'],
['y', '1', '2']]
当然,您可以立即将其转换为等效的单行列表comp:
[[spl] + li[1:] for li in Original_List for spl in li[0].split(',')]
取决于读者,可能会或可能不那么可读: - )
最后一点,请确保这是您真正想要的数据结构。由dict
键入的Contract_ID
似乎是您最终产品的非常自然的结构。
答案 1 :(得分:0)
Original_List=[['a,b','c','d','e','f'],['1','2','3'],['z,y','1','2']]
desired_list=[]
for p in pl:
try:
splited=p.split(',')
if not type(splited) is list:
splited=[splited]
if count(splited)>1:
for list in splited:
p[0]=list
desired_list.append(p)
else:
desired_list.append()
except:
pass