如何阻止Python parse_qs将单个值解析为列表?

时间:2009-06-21 15:23:36

标签: python python-2.6

在python 2.6中,代码如下:

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

提供以下输出:

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

这意味着即使测试只有一个值,它仍然会被解析为一个列表。有没有办法确保如果只有一个值,它不会被解析成一个列表,所以结果看起来像这样?

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

2 个答案:

答案 0 :(得分:113)

对于只想要一个简单字典并且从不需要使用相同密钥的多个值的人的旁注,请尝试:

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

这会给你一个不错的{'foo': 'bar', 'baz': 'qux'}。请注意,如果 同一个键的多个值,则只能获得最后一个。

答案 1 :(得分:26)

之后你可以修复它......

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

但是,我不认为会想要这个。如果一个通常是列表的参数恰好只有一个项目集到达,那么我会有一个字符串而不是我通常收到的字符串列表。