2012-08-01 2 views
9

I辞書名とアイテムのプロパティの値の値セクションに追加しています。だから、私はこの値の文字列を後で処理するときに、タブを分割して、forループをリストに繰り返します。Pythonは、ループのアクセスのために一度に2つの要素は

forループの名前と値の両方にアクセスするにはどうすればよいですか。それぞれのプロパティについては、名前と値を1つにまとめてファイルに書きたいと思っています。現在のリストは、次のようになります。

[A、B、A、B、A、B、A、B]

とそれぞれ、私が書きたいBの

'<' タグ名前=「>」b「が<」/タグ「>」

+0

大量の文字列連結で+ =を使用しないでください。 iterableを作成し、代わりにjoinを使用する –

答えて

16

あなたがステップサイズ2でリストを反復処理し、各反復の上に名前とタグをそれぞれ取得することができます...

for i in range(0,len(list1),2): 
    name = list1[i] 
    tag = list1[i+1] 
    print '<tag name="%s">%s</tag>' % (name, tag) 
4

編集:

# assuming you converted your list to a dictionary called values 

for k in values: 
    print '<tag name="%s">%s</tag>' % (k, values[k]) 

編集:私は辞書のキーを反復処理、あなたがconvert your list to a dictionaryすべきだと思う、と

...その後、もしあなたの鍵は、ユニークであり、順序は重要ではありません。あなたが何かのために辞書を必要としない場合は、結果を印刷して、他の答えが投稿された方が良い方法でしょう。

+0

辞書が通常のようにname:value以外の方法で自然につながっている場合は、それらをタプルとして保存することができます。 – CosmicComputer

+0

私は全体として「dict」が良い解決策であることに同意する傾向がありますが、この場合の変換は自明ではありません。 OPはキーがすでに存在するかどうかをチェックするために 'dict'を設定するときに注意する必要があります。値に追加する必要はありません。 – jmetz

+0

dictsも注文を失うことはありませんか? –

4

まず、文字列+ = string2を使用することは、新しい文字列にコピーするたびに悪い考えです。

value+=child.get('name') + '\t' + child.text + '\t' 

あなたは印刷するときに、単に

for name,text in values: 
    print '<tag name="{name}">{text}</tag>'.format(name=name,text=text) 

を行う何らかの理由で、あなたが本当にタブをしたい場合は、あなたが値コンストラクタを変更する必要があります

values = ((child.get('name'),child.text) for child in children) 

する必要があります(発電機の)リストに追加してください:

''.join((name+'\t'+value+'\t' for name,value in values))[:-1] 
+0

私の答えは最も直接的な質問に答えるが、これはOPがリストアプローチから切り離しても気にしないならば、これまでのところ、最も優れた(そしてほとんどのpythonic)アプローチだと思う。 – jmetz

+0

合意し、他の場所で分割した区切り文字としてタブを使用することは意味をなさないが、これははるかにクリーンで良いアプローチである。 –

関連する問題