Как преобразовать словарь в строку запроса в Python?

После использования cgi.parse_qs(), как преобразовать результат (словарь) обратно в строку запроса? Поиск чего-то похожего на urllib.urlencode().

Ответ 1

Python 3

urllib.parse. urlencode (query, дозыq = False, [...])

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

- Python 3 urllib.parse docs

dict - это отображение.

Наследие Питона

urllib.urlencode (query [, doseq ])
Преобразовать объект сопоставления или последовательность двухэлементных кортежей в строку, закодированную в процентах... серию пар key=value разделенных символами '&'...

- Python 2.7 urllib документы

Ответ 2

В python3 несколько отличается:

from urllib.parse import urlencode
urlencode({'pram1': 'foo', 'param2': 'bar'})

вывод: 'pram1=foo&param2=bar'

для совместимости с python2 и python3, попробуйте следующее:

try:
    #python2
    from urllib import urlencode
except ImportError:
    #python3
    from urllib.parse import urlencode

Ответ 3

Вы ищете нечто вроде urllib.urlencode()!

Однако, когда вы вызываете parse_qs() (в отличие от parse_qsl()), ключи словаря являются уникальными именами переменных запроса, а значения представляют собой списки значений для каждого имени.

Чтобы передать эту информацию в urllib.urlencode(), вы должны "сгладить" эти списки. Вот как вы можете сделать это со списком перехвата кортежей:

query_pairs = [(k,v) for k,vlist in d.iteritems() for v in vlist]
urllib.urlencode(query_pairs)

Ответ 4

Возможно, вы ищете что-то вроде этого:

def dictToQuery(d):
  query = ''
  for key in d.keys():
    query += str(key) + '=' + str(d[key]) + "&"
  return query

Он принимает словарь и преобразовывает его в строку запроса, как и urlencode. Он добавит окончательный "&" к строке запроса, но return query[:-1] исправляет это, если это проблема.