如何从单一的解析值到列表停止的Python parse_qs?(How to stop Python

2019-06-23 19:19发布

在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']}

Answer 1:

您可以修复它之后...

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

不过,我不认为会想这个。 如果一个参数通常是一个列表正好与只有一个项目组到达,那么我将有一个字符串,而不是字符串我通常接受的列表。



Answer 2:

一种人只是想简单的字典,从来没有需要多个值使用相同的密钥阿里纳斯尝试:

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

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



文章来源: How to stop Python parse_qs from parsing single values into lists?