Python 如何将字符串列表转换为查询字符串?

Python 如何将字符串列表转换为查询字符串?,python,query-string,Python,Query String,我有一份价值清单: md5 = ['1111', '3333', '44444', '555555', '56632423', '23423514', '2342352323'] 我想将它们连接成一个: 最好的方法是什么?您可以使用join(): 括号内的部分是生成器表达式,它为原始列表中的每个m提供'md5='+m join函数接受该表达式并将其链接成一个大字符串,在每对表达式之间放置一个&。既然您正在构建查询字符串,最好使用标准库中专门设计的函数: (在Python 3中) (在Pyth

我有一份价值清单:

md5 = ['1111', '3333', '44444', '555555', '56632423', '23423514', '2342352323']
我想将它们连接成一个:

最好的方法是什么?

您可以使用
join()

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


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

既然您正在构建查询字符串,最好使用标准库中专门设计的函数:

  • (在Python 3中)
  • (在Python 2中)
。。。而不是乱搞
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'
或者(多亏了中的Jon Clements),您可以将字典传递给urlencode和参数
doseq=True

urlencode({'md5': md5}, doseq=True)
。。。这会产生相同的结果。以上链接的文档对此进行了解释:

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


您可能首先想看看一些相关的问题,例如:将来,您应该提供更高级别的信息。您正在构建一个要在URL中使用的查询字符串吗?如果是这样,请告诉我们,然后给我们举个例子,而不是从最底层开始。看看为什么你通常会通过这种方式得到更好的答案(尽管这一次,你很幸运,比雷埃夫斯为你猜到了零)。这并没有给他他想要的结果。好吧,现在它起作用了,但是……有点奇怪。如果对连接元素的零件使用
join
,则一切都有意义。如果你试图使用它进行额外的字符串处理,你最终会遇到fencepost问题,你需要在开头添加一个额外的
md5=
(你的答案),或者在结尾删除一个
&
(ljlozano的答案),这使得出错变得更容易。是的,如果他正在构建一个查询字符串(很可能),这绝对是最好的方法。您可能希望添加一个事实,即它是
urllib.parse.urlencode
,而不是Python 3.x中的
urllib.urlencode
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'
urlencode({'md5': md5}, doseq=True)