Python:迭代字典,包含列表并将字符串和值存储在字符串中
问题描述:
params={
'key1': 'value1',
'key2': ['value_a','value_b']
}
这就是我开始的,但它无法处理列表。Python:迭代字典,包含列表并将字符串和值存储在字符串中
str_params = ''
for key, value in params.items():
print (key,value)
str_params += '&' + key + '=' + value
我试图产生这个字符串。
str_params = '&key1=value1&key2=value_a&key2=value_b'
答
迭代字典只产生键。如果您想要生成键值对,请使用items()
方法(Python 2.x中的iteritems
)。
使用urllib.parse.urlencode
(urllib.urlencode
在Python 2.x中):
>>> import urllib.parse
>>> urllib.parse.urlencode([
... (key, x) for key, xs in params.items()
... for x in ([xs] if isinstance(xs, str) else xs)
... ])
'key2=value_a&key2=value_b&key1=value1'
您可以使用手动串opeator,但它需要额外照顾的特殊字符应该是%xx
-encoded。
答
只是指出了未来的读者,如果发生这种情况是一个Django项目则大部分工作已经完成内部为您提供:
>>> from django.http import QueryDict
>>> q = QueryDict('', mutable=True)
>>> q.update({'key1': 'value1', 'key2': 'value_a'})
>>> q.update({'key2': 'value_b'})
>>> q.urlencode()
u'key2=value_a&key2=value_b&key1=value1'
而另一个方向:
>>> QueryDict('key2=value_a&key2=value_b&key1=value1')
<QueryDict: {u'key2': [u'value_a', u'value_b'], u'key1': [u'value1']}>
+0
注意!我正在研究烧瓶项目。我会考虑烧瓶是否有类似的情况。 – goopcat 2014-09-25 14:59:56
你有什么期望的'str_params'看起来像循环之后? – falsetru 2014-09-25 14:17:58
str_params ='key1 = value1&key2 = value_a&key2 = value_b' – goopcat 2014-09-25 14:22:03
因此,您可以对网址进行编码。 – falsetru 2014-09-25 14:26:21