Как остановить 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']}
Это означает, что, хотя для теста есть только одно значение, оно все равно анализируется в списке. Есть ли способ гарантировать, что если есть только одно значение, оно не анализируется в списке, так что результат будет выглядеть следующим образом:
{'test': 'test', 'test2': ['test2', 'test3']}
Ответы
Ответ 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
Однако я не думаю, что хочу этого. Если параметр, который обычно является списком, приходит только с одним набором элементов, тогда у меня будет строка, а не список строк, которые я обычно получаю.
Ответ 2
Сиденит для кого-то, просто желающего простого словаря и никогда не нуждающегося в нескольких значениях с одним и тем же ключом, попробуйте:
dict(urlparse.parse_qsl('foo=bar&baz=qux'))
Это даст вам приятный {'foo': 'bar', 'baz': 'qux'}
. Обратите внимание, что если для одного и того же ключа есть несколько значений, вы получите только последний.