私は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', []]]
タプルにタグと値のペアを分離する必要が、これは別の方法で処理されます。私は解決策を持っているが、それは非常にニシキヘビではありません。
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から解析され、別のソリューションに合わせてフォーマットを変更できます。アイデア?