从一个目录列表计算百分比变化

2024-05-15 02:22:39 发布

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

我有一份口述清单如下:

result = [
{
    "status": "BV", 
    "quarter": "2015-1", 
    "median": 360.0
}, 
{
    "status": "BV", 
    "quarter": "2015-2", 
    "median": 240.0
}, 
{
    "status": "CORR", 
    "quarter": "2015-1", 
    "median": 600.0
}, 
{
    "status": "CORR", 
    "quarter": "2015-2", 
    "median": 780.0
}, 
]

如何计算从2015年1月到2015年2月中值的百分比变化,以便我的输出如下:

[
{
    "status": "BV", 
    "pc_change": -33.3, 
}, 
{
    "status": "CORR", 
    "pc_change":30 , 
}
]

Tags: statusresultchangemedian百分比pcbv口述
2条回答

如果您总是有连续的对,您可以通过iter和zip来获得对:

def med_chnge(d1, d2):
    diff = d2["median"] - d1["median"]
    div = diff / d1["median"]
    return div * 100

it = iter(result)
for d1, d2 in zip(it,it):
    print({"status": d1["status"], "precent_chng": med_chnge(d1, d2)})

{'precent_chng': -33.33333333333333, 'status': 'BV'}
{'precent_chng': 30.0, 'status': 'CORR'}

您可以使用itertools成对读取列表,并根据以下计算构建另一个字典列表:

import itertools
output = []

for jan, feb in itertools.izip(*[iter(result)]*2):
    output.append({'status' : jan['status'], 'pc_change' : 100 * (feb['median'] - jan['median']) / jan['median']})

print output

这将为您提供如下输出列表:

[{'status': 'BV', 'pc_change': -33.333333333333336}, {'status': 'CORR', 'pc_change': 30.0}]

使用Python2.7测试。对于Python 3,更改如下:

output = []

for jan, feb in zip(*[iter(result)]*2):
    output.append({'status' : jan['status'], 'pc_change' : "{:.1f}".format(100 * (feb['median'] - jan['median']) / jan['median'])})

print(output)

此版本还将输出格式化为字符串形式的1位小数,给出:

[{'status': 'BV', 'pc_change': '-33.3'}, {'status': 'CORR', 'pc_change': '30.0'}]

相关问题 更多 >

    热门问题