[英]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.