我有值列表:
md5 = ['1111', '3333', '44444', '555555', '56632423', '23423514', '2342352323']
我想将它们连接成Query String:
'md5=1111&md5=3333&md5=44444&md5=555555&md5=56632423&md5=23423514&md5=2342352323'
最好的方法是什么?
答案 0 :(得分:12)
由于您正在构建查询字符串,因此最好使用标准库中专门设计的函数:
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中的Jon Clements),您可以将字典传递给urlencode和参数doseq=True
:
urlencode({'md5': md5}, doseq=True)
...产生相同的结果。这在上面链接的文档中进行了解释:
value元素本身可以是一个序列,在这种情况下,如果可选参数 doseq 的计算结果为 True ,则单独的
key=value
对由为密钥的值序列的每个元素生成'&'
。编码字符串中的参数顺序将与序列中参数元组的顺序相匹配。
答案 1 :(得分:5)
md5s = '&'.join('md5='+m for m in md5)
括号内的部分是一个生成器表达式,它为原始列表中的每个'md5='+m
提供m
。
join
函数接受该表达式并将其链接到一个大字符串中,在每对之间放置一个&
。
答案 2 :(得分:0)
您可以使用join()
:
md5=['1111','3333','44444','555555','56632423','23423514','2342352323']
print 'md5=' + '&md5='.join(md5)