python urlencode несколько одинаковых переменных

Я прочитал другие сообщения о urlencode python (v2) и не нашел этот вопрос.

Как я могу использовать urlencode (если это правильный инструмент для использования), если у меня есть несколько переменных, но все они имеют одно и то же имя? Итак, скажем, URL-адрес:

http://path.com/a?var=earth&var=wind&var=fire

Если я определяю это:

url = 'http://path.com/a?'
query_args = {'var': 'earth',
              'var': 'wind',
              'var': 'fire'}
encoded_args = urllib.urlencode(query_args, doseq=True)
print url + encoded_args

Кажется, urlencode возвращает только последний определенный «var»:

http://path.com/a?var=fire

Как я могу закодировать все var?


person Rob    schedule 13.02.2015    source источник
comment
Попробуйте распечатать query_args.   -  person Ashwini Chaudhary    schedule 13.02.2015
comment
Вам нужно отступить на несколько шагов и изучить словари. В любом языке программирования вы должны сначала изучить основы.   -  person 7stud    schedule 13.02.2015


Ответы (1)


Из документов.

Преобразуйте объект сопоставления или последовательность двухэлементных кортежей в строку с процентным кодированием...

Ну вот так:

>>> import urllib
>>> urllib.urlencode([('var', 'earth'), ('var', 'wind')])
'var=earth&var=wind'

«Проблема» заключается в том, что словарь, который вы передаете urlencode, имеет только одну пару ключ/значение:

>>> {'var': 'earth',
...  'var': 'wind',
...  'var': 'fire'}
{'var': 'fire'}

потому что словарь может иметь конкретный ключ только один раз. Разрешение urlencode принимать последовательность двухэлементных кортежей именно по этой причине (и для случайных URL-адресов, где важен порядок параметров запроса)

person mgilson    schedule 13.02.2015
comment
Спасибо. По какой-то причине я думал, что читал, что он принимает только списки. Мне никогда не приходило в голову, что urlencode будет принимать словари. Это имеет смысл и работает как шарм. Спасибо! - person Rob; 13.02.2015