避免迭代过多的算法构造时间

2024-05-29 07:31:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个列表-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'
  }
]

现在,我们可以看到有两个资源组nodeinfrastructure。你知道吗

我想创建一个数组,其最终产品包含资源的名称(nodeinfrastructure),并且mem_used将是mem_used的总和。你知道吗

我已经能够用regex来区分这两个组了。你知道吗

从现在开始,我如何创建一个数组memory_per_group,其结果是这样的

[
  {
    'mem_used': '230424576', 
    'rsrc_name': 'node'
  },
  {
    'mem_used': '134184960',
    'rsrc_name': 'infrastructure'
  },
]

我可以将rsrc的名称存储在tmp变量中,例如:

memory_per_pod_group = []
for item in memory_per_pod_instance:
    tmp_rsrc = item['rsrc_name']
    if(item['rsrc_name'] == tmp_rsrc):
        memory_per_pod_group.append({'rsrc_name':get_group(tmp_rsrc, pod_hash_map), 'mem_used':mem_used})
        memory_per_pod_instance.remove(item)
pprint.pprint(memory_per_pod_group)

但是接下来,我会在列表中重复一段不可忽略的时间。你知道吗

有没有办法提高效率?你知道吗


Tags: instancenamenode列表group资源itemmem
2条回答

您只需通过它进行一次迭代,并用一个简单的startswith进行检查,然后用一个简单的增量直接附加到所需的dictionary键。你知道吗

像这样的

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']

好吧,当然。您只需要一次迭代:

      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”。你知道吗

相关问题 更多 >

    热门问题