【问题标题】:How to convert a list of strings to a Query String?如何将字符串列表转换为查询字符串?
【发布时间】:2013-05-10 23:01:27
【问题描述】:

我有值列表:

md5 = ['1111', '3333', '44444', '555555', '56632423', '23423514', '2342352323']

我想将它们连接成Query String

'md5=1111&md5=3333&md5=44444&md5=555555&md5=56632423&md5=23423514&md5=2342352323'

最好的方法是什么?

【问题讨论】:

  • 您可能首先想尝试查看一些相关问题,例如this one。 :)
  • 以后应该给更高级的信息。您是否正在构建要在 URL 中使用的查询字符串?如果是这样,请告诉我们,then 给我们示例,而不是从最低级别开始。请参阅What is the XY problem?,了解为什么您通常会以这种方式获得更好的答案(尽管这一次,您很幸运,零比雷埃夫斯为您猜到了)。

标签: python query-string


【解决方案1】:

由于您正在构建查询字符串,因此最好使用标准库中专门为此而设计的函数:

...而不是乱搞str.join()。以下是您的使用方法:

from urllib.parse import urlencode # Python 3
# from urllib import urlencode # Python 2

md5 = ['1111', '3333', '44444', '555555', '56632423', '23423514', '2342352323']
urlencode([("md5", x) for x in md5])

结果:

'md5=1111&md5=3333&md5=44444&md5=555555&md5=56632423&md5=23423514&md5=2342352323'

或者(感谢 Python chatroom 中的 Jon Clements),您可以将字典传递给 urlencode 和参数 doseq=True

urlencode({'md5': md5}, doseq=True)

... 产生相同的结果。上面链接的文档对此进行了解释:

value 元素本身可以是一个序列,在这种情况下,如果可选参数 doseq 的计算结果为 True,则单独的 key=value 对由 @987654332 分隔@ 为键的值序列的每个元素生成。编码字符串中的参数顺序将与序列中参数元组的顺序相匹配。

【讨论】:

  • 是的,如果他正在构建一个查询字符串(很有可能),这绝对是最好的方法。在 Python 3.x 中,您可能需要添加 urllib.parse.urlencode 而不是 urllib.urlencode 的事实。
【解决方案2】:
md5s = '&'.join('md5='+m for m in md5)

括号内的部分是一个生成器表达式,它为原始列表中的每个m 提供'md5='+m

join 函数获取该表达式并将其链接到一个大字符串中,在每一对之间放置一个 &

【讨论】:

    【解决方案3】:

    你可以使用join():

    md5=['1111','3333','44444','555555','56632423','23423514','2342352323']
    print 'md5=' + '&md5='.join(md5)
    

    【讨论】:

    • 这并没有给他他所要求的输出。
    • 好的,现在可以了,但是……有点奇怪。如果您将join 用于连接元素的部分,那么一切都有意义。如果您尝试将其用于额外的字符串处理,您最终会遇到围栏问题,您需要在开头添加额外的md5=(您的答案)或在末尾删除&(ljlozano 的答案),这使得更容易出错。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多