我正在編寫將CSV轉換爲XML的代碼。假設我有一個單獨的列表,如:帶有多個可變長度元素的Python列表理解?
input = ['name', 'val', 0, \
'name', 'val', 1, 'tag', 'val', \
'name', 'val', 2, 'tag', 'val', 'tag', 'val', \
'name', 'val', 0]
這個列表以「名」的每一個切片表示一個名稱,一個值,和可選的標記值對一個可變數目的元素。
我想變成這樣:
output = [['name', 'val', []],
['name', 'val', ['tag', 'val']],
['name', 'val', ['tag', 'val', 'tag', 'val']],
['name', 'val', []]]
無需標籤 - 值對分離到的元組,這是在一個單獨的方法來處理。我有一個解決方案,但它不是非常符合Python:
output=[]
cursor=0
while cursor < len(input):
name=input[cursor]
val=input[cursor+1]
ntags=int(input[cursor+2])
optslice=input[cursor+3:cursor+3+2*ntags]
cursor = cursor+3+2*ntags
print name, val, ntags, optslice, cursor
output.append([name, val, optslice])
print output
> name val 0 [] 3
> name val 1 ['tag', 'val'] 8
> name val 2 ['tag', 'val', 'tag', 'val'] 15
> name val 0 [] 18
> [['name', 'val', []], ['name', 'val', ['tag', 'val']], ['name', 'val', ['tag', 'val', 'tag', 'val']], ['name', 'val', []]]
我想我大概可以做到這一點作爲一個列表理解,但每個元素的可變長度是扔我一個循環。輸入是從CSV解析的,我可以更改格式以更好地適應不同的解決方案。想法?