如何将字符串列表转换为查询字符串?
我有值列表:如何将字符串列表转换为查询字符串?
md5 = ['1111', '3333', '44444', '555555', '56632423', '23423514', '2342352323']
我想将它们串联成一个Query String:
'md5=1111&md5=3333&md5=44444&md5=555555&md5=56632423&md5=23423514&md5=2342352323'
什么是做到这一点的最好方法是什么?
您可以使用join()
:
md5=['1111','3333','44444','555555','56632423','23423514','2342352323']
print 'md5=' + '&md5='.join(md5)
这并没有给他他要求的输出。 – abarnert 2013-05-10 23:05:18
我需要在每个索引之间添加并标记 – 2013-05-10 23:06:08
@abarnert:我已经更新了我的答案。 – 2013-05-10 23:06:39
md5s = '&'.join('md5='+m for m in md5)
的部分括号内是一个生成器表达式,它给你'md5='+m
在原始列表中的每个m
。
join
函数采用该表达式并将其链接成一个大字符串,并在每对之间放置一个&
。
既然你正在构建一个查询字符串,最好是使用函数从专门设计用于这样做的标准库:
-
urllib.parse.urlencode()
(在Python 3) -
urllib.urlencode()
(在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'
或者(感谢乔恩·克莱门茨在Python chatroom),你可以通过字典来urlencode和参数doseq=True
:
urlencode({'md5': md5}, doseq=True)
...产生相同结果。这是上面链接的文档中说明:
本身的值元素可以是一个序列,并且在这种情况下,如果该可选参数doseq是评估为真,从个人
key=value
对通过'&'
分离是为密钥的值序列的每个元素生成。编码字符串中参数的顺序将与序列中参数元组的顺序相匹配。
是的,如果他构建了一个查询字符串(很可能),这绝对是最好的方法。您可能希望在Python 3.x中添加“urllib.parse.urlencode”而不是“urllib.urlencode”。 – abarnert 2013-05-10 23:12:00
@abarnert完成:-) – 2013-05-10 23:12:28
您可能首先想尝试查看一些相关问题,例如[this one](http://stackoverflow.com/questions/4481724/convert-a-list-of-characters-into-一个字符串)。 :) – summea 2013-05-10 23:04:48
未来,您应该提供更高级别的信息。你在建立一个查询字符串以在URL中使用吗?如果是这样,告诉我们,然后给我们一个例子,而不是从最底层开始。请参阅[什么是XY问题?](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)为什么你通常会以这种方式获得更好的答案(尽管这一次,你很幸运,零比雷埃夫斯为你猜测)。 – abarnert 2013-05-10 23:13:52
重新打开,因为这不是链接问题的重复,如@ZeroPiraeus所示。 – davidism 2014-06-20 19:13:19