gpt4 book ai didi

Python:将函数输出关联到字符串,然后组合成字典

转载 作者:行者123 更新时间:2023-12-01 05:31:15 25 4
gpt4 key购买 nike

我有一个名为node_names的计算机节点列表,我想找到每个节点中的可用内存量,并将其存储在第二个列表中。然后我想将这些列表合并到字典中。

我有:

for i in range(0, number_of_nodes):
sys_output = [commands.getoutput('ssh %s \'free -m\'' % node_names[i])]
free_memory = [x.split()[9] for x in sys_output]
print free_memory

对于 4 个节点,返回 [mem1]、[mem2]、[mem3]、[mem4]

如何将每个内存值合并到一个列表中?我很难将 free_memory 指定为列表,而不是在每次循环迭代后替换的字符串。

一旦我有了内存列表,我应该能够将它与 node_names 列表结合起来创建一个字典文件并进行任何必要的排序。

最佳答案

我建议直接构建字典:

import commands

node_free_mem = {}

for n in node_names:
sys_output = commands.getoutput("ssh %s 'free -m'" % n)
free_memory = sys_output.split()[9]
node_free_mem[n] = int(free_memory)

这里的代码完全符合您的要求:它构建一个列表,然后使用该列表创建字典。代码后讨论。

import commands

def get_free_mem(node_name):
sys_output = commands.getoutput('ssh %s \'free -m\'' % node_name)
free_memory = sys_output.split()[9]
return int(free_memory)

free_list = [get_free_mem(n) for n in node_names]
node_free_mem = dict(zip(node_names, free_list))

请注意,在两个代码示例中,我只是迭代节点名称列表,而不是使用 range() 来获取索引号并对列表建立索引。在 Python 中,最简单也是最好的方法就是询问您想要的内容:您想要名称,因此询问这些名称。

我为代码创建了一个辅助函数来获取可用内存。然后,一个简单的列表理解构建一个可用内存值的并行列表。

唯一棘手的一点是构建字典。 zip() 的这种用法在 Python 中实际上很常见,在这里进行讨论:

Map two lists into a dictionary in Python

对于 Python 2.x 中的大型列表,您可能需要使用 itertools.izip() 而不是内置的 zip(),但在 Python 3 中。 x 您只需使用内置的 zip()

编辑:清理代码;现在应该可以工作了。

commands.getoutput() 返回一个字符串。不需要将字符串打包在列表中,因此我删除了方括号。那么反过来就不需要列表理解来获取 free_memory 值;只是分割字符串。现在我们有一个简单的字符串,可以传递给 int() 以转换为整数。

关于Python:将函数输出关联到字符串,然后组合成字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20233350/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com