我在尝试创建字典、对其进行排序并将其加入以使用 urllib2 进行解析时遇到问题。这是我的代码:
values = {'STR':'1',
'STR':'123',
'STR':'3456',
'BAT':'95'}
ary_ordered_names = []
ary_ordered_names.append('STR')
ary_ordered_names.append('STR')
ary_ordered_names.append('STR')
ary_ordered_names.append('BAT')
queryString = "&".join( [ item+'='+urllib.pathname2url(values[item]) for item in ary_ordered_names ] )
print queryString
url = 'url'
full_url = url + '?' + queryString
print full_url
request = urllib2.Request(url, queryString)
response = urllib2.urlopen(full_url)
html = response.read()
print html
Run Code Online (Sandbox Code Playgroud)
因此,当我执行此脚本时,它可以工作,但只发送最后一个 STR 值 3456,而不发送其余的值。有人能帮我解决这个 python 字典问题吗?提前致谢。
字典没有顺序,键必须是唯一的。相反,如果顺序很重要,请将(key, value) 元组列表传递给函数:urllib.urlencode()
from urllib import urlencode
params = [('STR', '1'), ('STR', '123'), ('STR', '3456'), ('BAT', '95')]
query_string = urlencode(params)
Run Code Online (Sandbox Code Playgroud)
演示:
>>> from urllib import urlencode
>>> params = [('STR', '1'), ('STR', '123'), ('STR', '3456'), ('BAT', '95')]
>>> urlencode(params)
'STR=1&STR=123&STR=3456&BAT=95'
Run Code Online (Sandbox Code Playgroud)
您还可以使用值序列并传入True参数doseq:
params = [('STR', ['1', '123', '3456']), ('BAT', '95')]
query_string = urlencode(params, True)
Run Code Online (Sandbox Code Playgroud)
这会产生相同的输出:
>>> params = [('STR', ['1', '123', '3456']), ('BAT', '95')]
>>> urlencode(params, True)
'STR=1&STR=123&STR=3456&BAT=95'
Run Code Online (Sandbox Code Playgroud)
如果彼此的顺序BAT和相对关系并不重要,您仍然可以使用字典,但对值使用序列:STRSTR
params = {'STR': ['1', '123', '3456'], 'BAT': '95'}
query_string = urlencode(params, True)
Run Code Online (Sandbox Code Playgroud)
然后将值STR按顺序分组,但BAT参数可以在该组之后或之前结束:
>>> params = {'STR': ['1', '123', '3456'], 'BAT': '95'}
>>> urlencode(params, True)
'BAT=95&STR=1&STR=123&STR=3456'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1380 次 |
| 最近记录: |