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']}
後で修正できます...
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複数の値がある場合、最後の値しか取得できないことに注意してください。