Подтвердить что ты не робот

Как остановить 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']}
4b9b3361

Ответ 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'}. Обратите внимание, что если для одного и того же ключа есть несколько значений, вы получите только последний.