【问题标题】:Python Dictionary to URL ParametersPython 字典到 URL 参数
【发布时间】:2010-11-17 00:57:37
【问题描述】:

我正在尝试将 Python 字典转换为字符串以用作 URL 参数。我确信有更好、更多的Pythonic 方式来做到这一点。这是什么?

x = ""
for key, val in {'a':'A', 'b':'B'}.items():
    x += "%s=%s&" %(key,val)
x = x[:-1]

【问题讨论】:

    标签: python dictionary url-parameters


    【解决方案1】:

    这是在 Python 3 中使用它的正确方法。

    from urllib.parse import urlencode
    params = {'a':'A', 'b':'B'}
    print(urlencode(params))
    

    【讨论】:

    • 由于现在不推荐使用 python 2,我会接受这个答案,但堆栈溢出会阻止我更改接受的答案。
    【解决方案2】:

    对于 python 3,urllib 库发生了一些变化,现在你必须这样做:

    import urllib
    
    
    params = {'a':'A', 'b':'B'}
    
    urllib.parse.urlencode(params)
    

    【讨论】:

      【解决方案3】:

      使用第 3 方 Python url 操作库 furl

      f = furl.furl('')
      f.args = {'a':'A', 'b':'B'}
      print(f.url) # prints ... '?a=A&b=B'
      

      如果你想要重复的参数,你可以这样做:

      f = furl.furl('')
      f.args = [('a', 'A'), ('b', 'B'),('b', 'B2')]
      print(f.url) # prints ... '?a=A&b=B&b=B2'
      

      【讨论】:

      • 我在哪里得到毛皮?它似乎不是标准库
      • pip install furl 它不是标准库的一部分
      【解决方案4】:

      这对我来说似乎有点 Pythonic,并且不使用任何其他模块:

      x = '&'.join(["{}={}".format(k, v) for k, v in {'a':'A', 'b':'B'}.items()])
      

      【讨论】:

      • 这不会正确编码参数。如果您的数据包含与号、等号、哈希符号等,这将产生意想不到的结果。
      【解决方案5】:

      使用urllib.urlencode()。它采用键值对字典,并将其转换为适合 URL 的形式(例如,key1=val1&key2=val2)。

      如果您使用的是 Python3,请使用 urllib.parse.urlencode()

      如果您想创建一个包含重复参数的 URL,例如:p=1&p=2&p=3,您有两种选择:

      >>> import urllib
      >>> a = (('p',1),('p',2), ('p', 3))
      >>> urllib.urlencode(a)
      'p=1&p=2&p=3'
      

      或者如果你想创建一个带有重复参数的网址:

      >>> urllib.urlencode({'p': [1, 2, 3]}, doseq=True)
      'p=1&p=2&p=3'
      

      【讨论】:

      • 如果你想创建一个带有重复参数的网址,例如: ?p=1&p=2&p=3 然后 a = (('p',1),('p',2), ( 'p', 3)); urllib.urlencode(a) 结果是'p=1&p=2&p=3'
      • 另一种获取重复参数的方法:urllib.urlencode({'p': [1, 2, 3]}, doseq=True) 导致 'p=1&p=2&p=3'。
      • 如果您想知道doeseq 是关于什么的:“如果查询 arg 中的任何值是序列并且doseq 为真,则每个序列元素都将转换为单独的参数。”
      • Python3 用户:urllib.parse.urlencode()
      猜你喜欢
      • 2022-01-21
      • 2012-12-28
      • 2012-02-15
      • 1970-01-01
      • 2016-11-26
      • 2017-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多