使用Python对字典进行Url编码 - 在URL中命名键和值

0 投票
1 回答
1435 浏览
提问于 2025-04-17 22:35

我正在尝试使用urllib和urlencode生成一个特定格式的URL链接。

<img src=page.psp?KEY=%28SpecA%2CSpecB%29&VALUE=1&KEY=%28SpecA%2C%28SpecB%2CSpecC%29%29&VALUE=2>

我想用字典里的数据来输入到urllib.urlencode()这个函数里,但我需要把它变成一种格式,让键和值有变量名,就像下面这样。所以我字典里的键要变成NODE,值要变成VALUE。

wanted = urllib.urlencode( [("KEY",v1),("VALUE",v2)] )
req.write( "<a href=page.psp?%s>" % (s) );

我遇到的问题是,我想要的URL格式是上面的那样,但我得到的却是下面这种,而不是我想要的KEY=(SpecA,SpecB) NODE=1,KEY=(SpecA,SpecB,SpecC) NODE=2。

KEY=%28SpecA%2CSpecB%29%2C%28%28SpecA%2CSpecB%29%2CSpecC%29&VALUE=1%2C2 

到目前为止,我已经从字典中提取了键和值,把它们提取成元组、列表、字符串,还尝试过dict.items(),但这些都没什么帮助,因为我还是无法把它们变成我想要的格式。此外,我是在使用Python服务器页面,所以我一直得把东西打印成字符串,因为总是出现字符串错误。这是我目前的部分代码:

k = (str(dict))
ver1 = dict.keys()
ver2 = dict.values()

new = urllib.urlencode(function)
f = urllib.urlopen("page.psp?%s" % new)

我想知道我需要在提取字典中的值或转换它们为不同格式时做哪些更改,才能得到我想要的输出?任何帮助都非常感谢,如果需要的话我可以提供更多我的代码(虽然现在变得有点乱)。谢谢。

1 个回答

1

这段代码应该能给你想要的格式:

data = {
    '(SpecA,SpecB)': 1,
    '(SpecA,SpecB,SpecC)': 2,
}

params = []
for k,v in data.iteritems():
    params.append(('KEY', k))
    params.append(('VALUE', v))

new = urllib.urlencode(params)

需要注意的是,键值对的顺序可能不是你想要的,因为 dicts(字典)是没有顺序的。

撰写回答