附加到python中的字典列表

时间:2016-10-13 04:39:47

标签: python

self.LOG_DIR_LIST_BACKEND = [AMPLI_LOG, VAR_LOG, CORE_DUMP_LOG]
backend_nodes = [backend-1, backend-2, backend-3]

self.log_in_nodes = []
log_file = {}
for LOG_DIR_BACKEND in self.LOG_DIR_LIST_BACKEND:
    for node_backend in backend_nodes:
        log_in_nodes 'find %s -type f -name \"*log.*.gz\"' % LOG_DIR_BACKEND
        log_file[node_backend] = log_in_nodes
        self.log_in_nodes.append(log_file)
    print "Logs are ", self.log_in_nodes

预期产出:

[{backend-1: AMPLI_LOG, VAR_LOG, CORE_DUMP_LOG, backend-2: AMPLI_LOG, VAR_LOG, CORE_DUMP_LOG, backend-3: AMPLI_LOG, VAR_LOG, CORE_DUMP_LOG}] 

当我打印self.log_in_nodes时,输出每次都是新的,它不会附加。我做错了什么?

1 个答案:

答案 0 :(得分:0)

每次运行此方法时,它都会重置self.log_in_nodes,因为您正在执行:

self.log_in_nodes = []

如果你想把东西附加到那个列表,要么把它作为一个类变量,要么把它放在类之外,并只初始化一次。

选项一:

 class Foo
     log_in_nodes = []

 def your_method(self ...):
     log_file = {}
     for LOG_DIR_BACKEND in self.LOG_DIR_LIST_BACKEND:
         for node_backend in backend_nodes:
             ....
             self.log_in_nodes.append(log_file)

选项2:      LOG_IN_NODES = []

 class Foo

 def your_method(self ...):
     log_file = {}
     for LOG_DIR_BACKEND in self.LOG_DIR_LIST_BACKEND:
         for node_backend in backend_nodes:
             ....
             LOG_IN_NODES.append(log_file)

在这两种情况下,列表都会初始化一次,并在每次调用方法时附加。

旁注:

这是什么:

log_in_nodes 'find %s -type f -name \"*log.*.gz\"' % LOG_DIR_BACKEND`
^^^^^^^^^^^^  Did you miss type this?   forget an assignment?

可能你的意思是:

log_in_nodes = 'find %s -type f -name \"*log.*.gz\"' % LOG_DIR_BACKEND

而不是:

backend_nodes = [backend-1, backend-2, backend-3]

你可以这样做:

backend_nodes = range(backend - 1, backend - 4, -1)

虽然不是很短,但与你编写代码的方式相比,它会立即清楚它的作用。