web-dev-qa-db-ja.com

Python parse_qsが単一の値をリストに解析しないようにする方法は?

python 2.6では、次のコード:

import urlparse
qsdata = "test=test&test2=test2&test2=test3"
qs = urlparse.parse_qs(qsdata)
print qs

次の出力が表示されます。

{'test': ['test'], 'test2': ['test2', 'test3']}

つまり、テストする値は1つしかなくても、リストに解析されます。値が1つしかない場合、それがリストに解析されないようにして、結果が次のようになるようにする方法はありますか?

{'test': 'test', 'test2': ['test2', 'test3']}
41
Shabbyrobe

後で修正できます...

import urlparse
qsdata = "test=test&test2=test2&test2=test3"
qs = dict( (k, v if len(v)>1 else v[0] ) 
           for k, v in urlparse.parse_qs(qsdata).iteritems() )
print qs

しかし、私は[〜#〜] i [〜#〜]がこれを望んでいるとは思いません。通常はリストであるパラメーターがたった1つのアイテムセットで到着した場合、通常受け取る文字列のリストの代わりに文字列を取得します。

単純な辞書が欲しいだけで、同じキーを持つ複数の値が必要ないという人のための副注として、以下を試してください。

dict(urlparse.parse_qsl('foo=bar&baz=qux'))

これは素敵な{'foo': 'bar', 'baz': 'qux'}。同じキーにare複数の値がある場合、最後の値しか取得できないことに注意してください。

125
tuomassalo