Как преобразовать словарь в строку запроса в Python? - PullRequest
85 голосов
/ 18 октября 2011

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

Ответы [ 4 ]

136 голосов
/ 18 октября 2011

Python 3

urllib.parse.urlencode (запрос, drugq = False, [...])

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

- Python 3 urllib.parse документы

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

Legacy Python

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

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

48 голосов
/ 29 января 2016

В python3 немного отличается:

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

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

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

5 голосов
/ 18 октября 2011

Вы ищете что-то точно как 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)
0 голосов
/ 18 октября 2011

Может быть, вы ищете что-то вроде этого:

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

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

...