首页 > 解决方案 > 将 Python(2.7) 字典转换为有效的查询参数

问题描述

因此,到目前为止,我一直在环顾四周,并找到了热门歌曲,但没有什么能完全符合 IMO 的要求。我想要做的是获取一个名为'result'的Python dict(注意'keyword_scores'是一个dicts列表,在'data'dict中。):

>>> print result
>>> {   
        u'data': {   
            u'clean_table': u'true',
            u'keyword_scores': [   
                {   
                    u'keyword': u'edited for easy reading on SO',
                    u'score': 0.4054651081081644
                }
            ],
            u'user_id': u'2'
        }
    }

并且,至少我认为,使用一些组合

urllib.urlencode()

urlparse.parse_qs()

能够将“query_string”连接到 URL 上以供在内部使用:

urllib2.Request(host_domain + some_post_data_endpoint + query_string)

我只建议这些库,因为这是我认为我需要根据我目前的搜索使用的库,但我对在这里使用的方法和工具持开放态度。我遇到的问题是,无论出于何种原因,我似乎需要在调用 parse_qs() 之前对其进行 urlencode(),但其他建议说我需要在编码之前先调用 parse_qs()。似乎没有一种简洁的方法可以将不完全“扁平”的字典转换为 urllib2.Request() 使用的查询参数。

先感谢您!

标签: python-2.7urllib2urlliburlencodeurlparse

解决方案


我假设您有一些要将数据发布到的端点。然后您可以执行以下操作并在端点解码 url:

import urllib
result = {u'data': {u'clean_table': u'true',u'keyword_scores': [{u'keyword': u'edited for easy reading on SO', u'score': 0.4054651081081644}],u'user_id': u'2'}}
result_string = urllib.urlencode(result)
urllib2.Request(host_domain + some_post_data_endpoint + "?result=" + result_string)

例如,如果您的端点是 JS,您只需执行以下操作即可将结果作为同一个字典:

var url = new URL(window.location.href);
var result = JSON.parse(url.searchParams.get("result"));

推荐阅读