我有如下字典
dictSumEachDay = {'2019.09.17': (558, 558),
'2019.09.09': (541, 552),
'2019.09.07': (415, 415),
'2019.09.11': (817, 817),
'2019.09.10': (755, 751),
'2019.09.12': (803, 771),
'2019.09.14': (679, 712),
'2019.09.06': (660, 654),
'2019.09.13': (737, 733),
'2019.09.15': (837, 837),
'2019.09.16': (715, 715),
'2019.09.08': (489, 492)}
我想计算两个值之间的百分比差异,并返回一个字典,例如
dictPercentDiff = {'2019.09.17': 0.0,
'2019.09.09': 2.012808783165599,
'2019.09.07': 0.0,
'2019.09.11': 0.0,
'2019.09.10': 0.5312084993359893,
'2019.09.12': 4.066073697585769,
'2019.09.14': 4.744787922358016,
'2019.09.06': 0.91324200913242,
'2019.09.13': 0.5442176870748299,
'2019.09.15': 0.0,
'2019.09.16': 0.0,
'2019.09.08': 0.6116207951070336}
已经尝试
dictPercentDiff = {}
for key, value in dictSumEachDay.items():
top = abs(value[0] - value[1])
bottom = (value[0] + value[1])/2
dictPercentDiff[dictSumEachDay[key]] = (top/bottom)*100
哪个返回:
{(558, 558): 0.0,
(541, 552): 2.012808783165599,
(415, 415): 0.0,
(817, 817): 0.0,
(755, 751): 0.5312084993359893,
(803, 771): 4.066073697585769,
(679, 712): 4.744787922358016,
(660, 654): 0.91324200913242,
(737, 733): 0.5442176870748299,
(837, 837): 0.0,
(715, 715): 0.0,
(489, 492): 0.6116207951070336}
很显然,我在混合键和值,但似乎无法正常工作。
答案 0 :(得分:1)
假设您希望按日期输入%差异,您所需要做的就是更正最终的dict分配:
dictPercentDiff[key] = (top/bottom)*100
您发布的代码非常明确地使用值的元组作为新字典的键。
答案 1 :(得分:1)
Person
答案 2 :(得分:1)
问题出在dictPercentDiff[dictSumEachDay[key]]
上。您告诉它要获取键(日期),在dictSumEachDay
(元组)中找到与该键关联的值,然后将其用作键。如果只是将其更改为dictPercentDiff[key]
,那么您将获得所需的内容。同样,使用“分子”和“分母”而不是“顶部”和“底部”更为清晰。但是,最好使用一种理解:
dictPercentDiff = {key: 200*abs(value[1]-value[0])/(value[0]+value[1]) for key, value in dictSumEachDay.items()}
请进一步注意,人们通常使用“百分比差异”来表示有符号差异作为第一个值的百分比,而您使用它来表示差异的绝对值作为平均值的百分比。也就是说,您使用的是100*abs(value[1]-value[0])/((value[0]+value[1])/2)
而不是100*(value[1]-value[0])/(value[0])
。