如何在Python中将字典转换为查询字符串?

时间:2011-10-18 03:10:19

标签: python urllib2 urllib

使用cgi.parse_qs()后,如何将结果(字典)转换回查询字符串?寻找与urllib.urlencode()类似的内容。

4 个答案:

答案 0 :(得分:135)

Python 3

  

urllib.parse. urlencode (查询,doseq = False,[...])

     

映射对象或一系列包含str或bytes对象的双元素元组转换为百分比编码的ASCII文本字符串。

     

- Python 3 urllib.parse docs

dict是一个映射。

Legacy Python

  

urllib.urlencodequery [,doseq])
      将映射对象或一系列双元素元组转换为“百分比编码”字符串...由key=value个字符分隔的一系列'&'对...

     

- Python 2.7 urllib docs

答案 1 :(得分:46)

在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

答案 2 :(得分:5)

您正在寻找完全之类的内容,例如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)

答案 3 :(得分:-1)

也许你正在寻找这样的东西:

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

它需要一个字典并将其转换为查询字符串,就像urlencode一样。它会附加一个“&”查询字符串,但return query[:-1]修复了,如果这是一个问题。