[英]Get average of sub values in python nested dictionary
我有一个情况,我有一个表(从 excel 导入)机智要求和子要求,可以像这个例子一样看到:
+-------------+--------+
| Requeriment | Points |
+-------------+--------+
| 1 | |
+-------------+--------+
| 2 | |
+-------------+--------+
| 3 | |
+-------------+--------+
| 3.1 | |
+-------------+--------+
| 3.2 | |
+-------------+--------+
| 3.3 | |
+-------------+--------+
| 4 | |
+-------------+--------+
| 5 | |
+-------------+--------+
| 5.1 | |
+-------------+--------+
| 5.2 | |
+-------------+--------+
| 5.2.1 | |
+-------------+--------+
| 5.2.1.1 | |
+-------------+--------+
| 5.3 | |
+-------------+--------+
| 6 | |
+-------------+--------+
所有需求最大值为'1.0',如果存在需求有子需求的情况,则需求值= sum(subrequirments)/total subrequirments,它也适用于子需求和子需求。
在这里,我展示了如何对没有子要求的要求进行评估,如果它不完整,则为 0,如果已完成,则为 1.0。
带有子要求的要求将通过以下公式进行评估:要求点=子要求的总和/子要求的值。 值将是这样的:
这张表被转换成这样的字典:
{requeriments:{
'1':{'points':'', subrequeriments: {}},
'2':{'points':'', subrequeriments: {}},
'3':{'points':'', subrequeriments: {
'3.1':{'points':'', subrequeriments: {} },
'3.2':{'points':'', subrequeriments: {} },
'3.3':{'points':'', subrequeriments: {} }
}
},
'4':{'points':'', subrequeriments: {}},
'5':{'points':'', subrequeriments: {
'5.1':{'points':'', subrequeriments: {} },
'5.2':{'points':'', subrequeriments: {
'5.2.1':{'points':'', subrequeriments: {
'5.2.1.1':{'points':'', subrequeriments: {}
}
}
},
'5.3':{'points':'', subrequeriments: {} }
}
},
'6':{'points':'', subrequeriments: {}}
}
}
最后,我无法得到一个很好的方法来评估在嵌套子要求中应用函数要求值 = sum(subrequirments)/total subrequirments 的要求。
你知道一种将它应用到字典上的好方法,或者至少一种将它应用到丢失或桌子上的好方法吗?
使用递归函数:
def calcPoints(d):
points = 0
for k,v in d.items():
if v['points'] == '':
v['points'] = calcPoints(v['subrequirements'])
points += float(v['points'])
return str(points / max(1,len(d)))
输入:
data = {'requeriments':
{'1': {'points': '1', 'subrequirements': {}},
'2': {'points': '0', 'subrequirements': {}},
'3': {'points': '', 'subrequirements':
{'3.1': {'points': '1', 'subrequirements': {}},
'3.2': {'points': '0', 'subrequirements': {}},
'3.3': {'points': '1', 'subrequirements': {}}}},
'4': {'points': '1', 'subrequirements': {}},
'5': {'points': '', 'subrequirements':
{'5.1': {'points': '1', 'subrequirements': {}},
'5.2': {'points': '', 'subrequirements':
{'5.2.1': {'points': '', 'subrequirements':
{'5.2.1.1': {'points': '1', 'subrequirements': {}},
'5.2.1.2': {'points': '0', 'subrequirements': {}}}},
'5.2.2': {'points': '0', 'subrequirements': {}}}},
'5.3': {'points': '1', 'subrequirements': {}}}},
'6': {'points': '0', 'subrequirements': {}}}}
输出:
calcPoints(data['requeriments']) # '0.5694444444444444'
print(data)
{'requeriments':
{'1': {'points': '1', 'subrequirements': {}},
'2': {'points': '0', 'subrequirements': {}},
'3': {'points': '0.6666666666666666', 'subrequirements':
{'3.1': {'points': '1', 'subrequirements': {}},
'3.2': {'points': '0', 'subrequirements': {}},
'3.3': {'points': '1', 'subrequirements': {}}}},
'4': {'points': '1', 'subrequirements': {}},
'5': {'points': '0.75', 'subrequirements':
{'5.1': {'points': '1', 'subrequirements': {}},
'5.2': {'points': '0.25', 'subrequirements':
{'5.2.1': {'points': '0.5', 'subrequirements':
{'5.2.1.1': {'points': '1', 'subrequirements': {}},
'5.2.1.2': {'points': '0', 'subrequirements': {}}}},
'5.2.2': {'points': '0', 'subrequirements': {}}}},
'5.3': {'points': '1', 'subrequirements': {}}}},
'6': {'points': '0', 'subrequirements': {}}}}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.