После использования cgi.parse_qs()
, как преобразовать результат (словарь) обратно в строку запроса? Поиск чего-то похожего на urllib.urlencode()
.
Как преобразовать словарь в строку запроса в Python?
Ответ 1
Python 3
urllib.parse.
urlencode
(query, дозыq = False, [...])Преобразуйте объект сопоставления или последовательность двухэлементных кортежей, которые могут содержать объекты str или bytes, в текстовую строку ASCII с кодировкой в процентах.
dict
- это отображение.
Наследие Питона
urllib.urlencode
(query
[,doseq
])
Преобразовать объект сопоставления или последовательность двухэлементных кортежей в строку, закодированную в процентах... серию парkey=value
разделенных символами'&'
...
Ответ 2
В 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
Ответ 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]
исправляет это, если это проблема.