2014-11-04 106 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