首页 > 解决方案 > Python,从数据输入中添加两个值

问题描述

直截了当:我的意见:

d = {'Key1': [('aaaaa', '834M', '118G'),
           ('bbbbb', '216G', '220.3M')],
'Key2': [('ccccc', '790M', '162G'),
           ('ddddd', '203G', '34.8G'),
           ('eeeee', '126M', '112G')],
'Key3': [('fffff', '921G', '30.8M'),
           ('ggggg', '235G', '2.63G')]}

到目前为止,我有这个并且它有效,但仅适用于 G (Gb) 值:

for p, vl in pools.items(): 
    alloc = ('{}G'.format(round(sum([float(j[1].split('G')[0]) for j in vl]))))
    free = ('{}G'.format(round(sum([float(j[2].split('G')[0]) for j in vl]))))


I need to add values accordingly: 
from key1 aaaaa value 834M + 
from key1 bbbbb value 216G
then 
from key1 aaaaa value 118G +
from key1 bbbbb value 220.3M 
and so on for every key
so the output will look like this:

 216.8G 118.2G

等等。

标签: pythonstringparsing

解决方案


我将对此进行一些重构,以使行保持在 80 个字符以内并提高可读性:

def split(j, i):
    if 'G' in j[i]:
      return float(j[i].split('G')[0]) 
    return float(j[i].split('M')[0]) / 1000

for p, vl in pools.items(): 
    alloc = ('{}G'.format(round(sum([split(j, 1) for j in vl]))))
    free = ('{}G'.format(round(sum(split(j, 2) for j in vl]))))

您还可以将拆分函数编写为:

def split(j, i):
    suffix = j[i][-1]
    value = float(j[i][:-1]) 
    return value if suffix == 'G' else value / 1000

推荐阅读