在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']}
您可以修复它之后...
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
不过,我不认为我会想这个。 如果一个参数通常是一个列表正好与只有一个项目组到达,那么我将有一个字符串,而不是字符串我通常接受的列表。
一种人只是想简单的字典,从来没有需要多个值使用相同的密钥阿里纳斯尝试:
dict(urlparse.parse_qsl('foo=bar&baz=qux'))
这会给你一个不错的{'foo': 'bar', 'baz': 'qux'}
请注意,如果有对同一个键多个值,你只会得到最后一个。