我有一个列表-memory_per_instance
-如下所示:
[
{
'mem_used': '14868480',
'rsrc_name': 'node-5b5cf484-g582f'
},
{
'mem_used': '106618880',
'rsrc_name': 'infrastructure-656cf59bbb-xc6bb'
},
{
'mem_used': '27566080',
'rsrc_name': 'infrastructuret-l6fl'
},
{
'mem_used': '215556096',
'rsrc_name': 'node-62lnc'
}
]
现在,在这里我们可以看到有两个资源组node
和infrastructure
。
我想创建一个数组,其最终产品包含资源名称(node
或infrastructure
),而mem_used
将是{{1 }}。
我已经可以使用正则表达式来区分这两个组。
从现在开始,我如何创建一个数组mem_used
-其结果是
memory_per_group
我可以将[
{
'mem_used': '230424576',
'rsrc_name': 'node'
},
{
'mem_used': '134184960',
'rsrc_name': 'infrastructure'
},
]
的名称存储在tmp变量中,例如:
rsrc
但是,然后,我将在列表中遍历一个不可忽略的时间。
有没有办法提高效率?
答案 0 :(得分:1)
好的,当然。您只需要进行一次迭代:
data = [
{
'mem_used': '14868480',
'rsrc_name': 'node-5b5cf484-g582f'
},
{
'mem_used': '106618880',
'rsrc_name': 'infrastructure-656cf59bbb-xc6bb'
},
{
'mem_used': '27566080',
'rsrc_name': 'infrastructuret-l6fl'
},
{
'mem_used': '215556096',
'rsrc_name': 'node-62lnc'
}
]
def get_group(item):
rsrc_name = item['rsrc_name']
index = rsrc_name.index('-');
return rsrc_name[0:index]
def summary(list):
data = {};
for item in list:
group = get_group(item)
if not (group in data):
data[group] = 0
data[group] += int(item['mem_used'])
result = []
for rsrc_name, mem_used in data.items():
result.append({ 'rsrc_name': rsrc_name, 'mem_used': str(mem_used) })
return result
if __name__ == '__main__':
print(summary(data))
结果:
[{'mem_used': 230424576, 'rsrc_name': 'node'}, {'mem_used': 106618880, 'rsrc_name': 'infrastructure'}, {'mem_used': 27566080, 'rsrc_name': 'infrastructuret'}]
请注意,get_group
对于您的用例而言可能太简单了。由于其中一个资源的键'infrastructuret'
的末尾带有“ t”,因此结果分为三组。
答案 1 :(得分:0)
您可以将其遍历一次,然后使用简单的startswith进行检查,然后以简单的增量直接附加到所需的字典键上。
类似
memory_total = { 'node': 0, 'instance': 0 };
for item in memory_per_instance:
if item['rsrc_name'].startsWith('node'):
memory_total['node'] += item['mem_used']
if item['rsrc_name'].startsWith('infrastructure'):
memory_total['instance'] += item['mem_used']