Как остановить Python parse_qs от разбора отдельных значений в списки? - PullRequest
39 голосов
/ 21 июня 2009

В 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 ]

115 голосов
/ 23 ноября 2011

Sidenote для человека, который просто хочет простой словарь и никогда не нуждается в нескольких значениях с одним и тем же ключом, попробуйте:

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

Это даст вам хороший {'foo': 'bar', 'baz': 'qux'}. Обратите внимание, что если - это несколько значений для одного и того же ключа, вы получите только последнее.

26 голосов
/ 21 июня 2009

Вы можете исправить это потом ...

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

Однако я не думаю, что Я хотел бы этого. Если параметр, который обычно является списком, прибывает только с одним набором элементов, то вместо списка строк, который я обычно получаю, у меня будет строка вместо

...