Как преобразовать словарь в строку запроса в Python?
после использования cgi.parse_qs()
, Как преобразовать результат (словарь) обратно в строку запроса? Ищу что-то похожее на urllib.urlencode()
.
4 ответа:
С документы:
urllib.urlencode
(query
[,doseq
])
Конвертировать объект сопоставления или последовательность двухэлементных кортежей в строку с" процентным кодированием"... серияkey=value
пар, разделенных'&'
символы...A
dict
сопоставление.
в python3, немного отличается:
from urllib.parse import urlencode urlencode({'pram1': 'foo', 'param2': 'bar'})
выход:
'pram1=foo¶m2=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]
исправляет это, если это проблема.