2014-11-04 108 views
-1

我正在寫一些代碼,我的最高目標是提供一些json格式的信息。我想顯示servernames節點和serverurls這樣的:(我的目的不是漂亮的打印,但我只是顯示它這個樣子,所以它更明顯)python中的dictionary.append的行爲

{ 
"server": [ 
      { "name" : "some_server_name", "url" : "some_server_url" } 
      { "name" : "another_server_name", "url" : "another_server_url" } 
      ] 
} 

我現在有兩個列表,一個與servernames節點和另一個與serverulrs。我遍歷名稱,然後訪問匹配的網址。在完成之後,我想將它附加到字典中。當我收到這本字典時。我想將此附加到我的json_dict。我創建了這個字典,因爲我有兩個其他列表,我想在json信息中顯示。 (您可以忽略RDP和證書,因爲它們已經正確顯示)

def build_dict(server_name, server_url, rdp, cert): 
     json_dict = defaultdict(list) 
     server_dict = {} 

     if server_name and server_url: 
       for i, iter_name in enumerate(server_name): 
         server_dict.update(name = iter_name, url = server_url[i]) 
         json_dict['server'].append(server_dict) 
     if rdp: 
       for iter_rdp in rdp: 
         json_dict['config'].append(iter_rdp) 
     if cert: 
       for iter_cert in cert: 
         json_dict['cert'].append(iter_cert) 

     return json_dict 

我servernames節點列表中的條目:

[u'123name」,u'qwer123' ]

而且我serverurls列表中的條目:

[u'123url」,u'qwer123' ]

不幸的是,最後的輸出是這樣的:

{"cert": ["123url", "123123", "123123123"], 
"config": ["123rdp", "123123", "123123123"], 
    "server": [ 
      {"url": "qwer123", "name": "qwer123"}, 
      {"url": "qwer123", "name": "qwer123"} 
      ] 
} 

可以忽略證書和配置,因爲這已經按預期工作。我只是不明白,爲什麼我有:

{"url": "qwer123", "name": "qwer123"}, 
{"url": "qwer123", "name": "qwer123"} 

而不是:

{"url": "123name", "name": "123url"}, 
{"url": "qwer123", "name": "qwer123"} 

作爲輸出。

+1

可能重複(http://stackoverflow.com/questions/2797114/python-references) – simonzack 2014-11-04 10:12:33

+0

你們可以請很好地解釋downvote :)?我希望我的問題儘可能好 – ZedsWhatSheSaid 2014-11-04 10:12:48

+0

您的問題可能在發佈的代碼之外,您可以更改它以顯示您的調用build_dict的方式。我的意思是,你確定你不是用相同的參數調用它嗎? – dpgaspar 2014-11-04 10:16:08

回答

1

正如jonrsharpe所述,你有你的server_dict在錯誤的地方。您應該考慮將它放在for循環中,因此您只需更新最近通過for循環接收的兩個條目。 [Python的參考文獻的

if server_name and server_url: 
    for i, iter_name in enumerate(server_name): 
     server_dict = dict(name = iter_name, url = server_url[i]) 
     json_dict['server'].append(server_dict) 
+0

'server_dict = {}'這一行在這裏是多餘的。 – jonrsharpe 2014-11-04 10:46:19

+0

你是對的謝謝:) – 2014-11-04 11:06:54