2014-09-25 79 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

相關問題