繁体   English   中英

附加到python中的字典列表

[英]Append to a list of dictionaries in 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 时,输出每次都是新的,它没有附加。 我究竟做错了什么?

每次运行此方法时,它都会重置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)

虽然不是很短,但与您编写代码的方式相比,它正在做什么就很明显了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM