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


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

4 76

4 ответа:

С документы:

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

A dict сопоставление.

в 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

ты что-то ищешь ровно как urllib.urlencode()!

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

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

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

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

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

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