python中的dictionary.append的行为

时间:2014-11-04 10:10:13

标签: python dictionary

我正在编写一些我最高目标的代码,以json格式提供一些信息。我想显示像这样的服务器名称和服务器:(我的目标不是漂亮的打印,但我只是这样显示它,所以它更明显)

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

我现在有两个列表,一个是服务器名,另一个是serverulrs。我遍历名称,然后访问匹配的URL。完成之后我想将它附加到字典中。当我拿到这本字典。我想将它附加到我的json_dict。我创建了那个dict,因为我还有另外两个列表,我想在json信息中显示它。 (您可以忽略rdp和cert,因为它们已经正确显示)

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

我的服务器名称列表的条目:

  

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

我的服务员名单列表:

  

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

不幸的是,最终输出如下所示:

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

您可以忽略cert和config,因为这已经按预期工作。我只是不明白为什么我有:

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

而不是:

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

作为输出。

1 个答案:

答案 0 :(得分:1)

正如jonrsharpe所说,你的server_dict位于错误的地方。您应该考虑将它放在for循环中,这样您只需更新最近通过for循环接收的两个条目。

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)