【问题标题】:Get average of sub values in python nested dictionary获取python嵌套字典中子值的平均值
【发布时间】:2021-10-18 20:37:50
【问题描述】:

我有一个表(从 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',如果存在需求有子需求的情况,需求值=总和(子需求)/总子需求,它也适用于具有子需求的子需求。

这里我展示了没有子需求的需求是如何评估的

具有子需求的需求将使用一个公式进行评估: 请求点=子请求的总和/子请求的值。值将是这样的:

这个表是这样在字典中转换的:

{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: {}}
 }
}

最后,我无法找到一个好方法来评估应用函数 requirment value = sum(subrequirments)/total subrequirments 在嵌套子需求中的需求。

您是否知道将其应用于字典的好方法,或者至少将其应用于丢失或桌子的好方法?

【问题讨论】:

  • 你能举例说明你的预期输出是什么吗?例如。您希望“5”、“5.1”、“5.2”、“5.2.1”和“5.2.1.1”的值是多少?似乎是一个可以通过递归以非常简单的方式解决的问题,但我并没有完全遵循应该应用什么算法来获取值。
  • 请注意,拼写为requirement 而不是requeriment。
  • All requeriment max value is '1.0' 不清楚。你能解释一下这是什么意思吗?
  • 你自己尝试过什么?您显然已经有一些将表格处理成字典的代码?或者您是否也在问如何做到这一点?请专注于一个问题,并与代表您实际处理的数据的数据共享您已经编写的代码。 stackoverflow.com/help/how-to-ask
  • 我已经在这篇文章中进行了编辑,您可以看到您的一些疑问的答案。

标签: python list dictionary nested evaluation


【解决方案1】:

使用递归函数:

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': {}}}}

【讨论】:

  • Thaks,你的回答帮助我学习如何使用字典中的递归函数,非常感谢
猜你喜欢
  • 2023-04-03
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-24
  • 1970-01-01
  • 2022-10-07
  • 1970-01-01
相关资源
最近更新 更多