2014-09-25 34 views
1
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'  
+0

你有什么期望的'str_params'看起来像循环之后? – falsetru 2014-09-25 14:17:58

+0

str_params ='key1 = value1&key2 = value_a&key2 = value_b' – goopcat 2014-09-25 14:22:03

+0

因此,您可以对网址进行编码。 – falsetru 2014-09-25 14:26:21

回答

2

迭代字典只产生键。如果您想要生成键值对,请使用items()方法(Python 2.x中的iteritems)。

使用urllib.parse.urlencodeurllib.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。

+0

我修改了一下我的问题。我最初没有包括我想要的字符串的样子。对不起 – goopcat 2014-09-25 14:27:12

+0

@goopcat,我也相应地修改了答案。一探究竟。 – falsetru 2014-09-25 14:27:53

+0

谢谢!我不知道urllib,这正是我正在做的。这就像你读我的脑海,哈哈。 – goopcat 2014-09-25 14:49:21

1

你需要使用items()访问字典的键和值:

>>> for i,j in params.items(): 
... str_params+= '&' +i+'='+str(j) 
+0

诡异的是! ;) 就是那个 ! – Kasramvd 2014-09-25 14:24:43

+0

'str(j)'不会给OP想要的列表。 – falsetru 2014-09-25 14:28:20

+0

我知道亲爱的@falsetru幸运的是你做到了!并拿我的投票! – Kasramvd 2014-09-25 14:30:47

0

只是指出了未来的读者,如果发生这种情况是一个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

相关问题