从嵌套字典获取最小值

时间:2019-12-13 10:22:34

标签: python-3.x

在Python 3.7上我有一个字典:

my_dict={
  "rows": [
    {
      "name": "AAAAA",
      "ariseTime": 1568395916000,
      "key": "MMS",
      "value": 21.0,
      "tooltipValue": "21.0"
    },
    {
      "name": "AAAAA",
      "ariseTime": 1568395944000,
      "key": "MMS",
      "value": 20.0,
      "tooltipValue": "20.0"
    },
    {
      "name": "AAAAA",
      "ariseTime": 1568396177000,
      "key": "MMS",
      "value": 19.0,
      "tooltipValue": "19.0"
    },

  ],
  "total": 4017,
  "yaxis": [

  ]
}

我必须在此处找到最小值19

我已经尝试:

def Find_min_est(est_dict):
        v = min(est_dict.keys(), key=lambda x: est_dict['rows'][x]['value'])
        return v

但是错误返回是:

TypeError: list indices must be integers or slices, not str

有人可以帮我吗?我最近才刚开始学习Python

1 个答案:

答案 0 :(得分:0)

您得到的错误归因于行v = min(est_dict.keys(), key=lambda x: est_dict['rows'][x]['value'])keys()将返回列表["rows","total","yaxis"]。然后,对于此列表中的每个条目,您都尝试执行est_dict['rows'][x]['value']est['rows']是一个列表,est_dict['rows'][x]试图访问该列表的元素,其中x是一个字符串。

您需要迭代my_dict["rows"](如果我正确地理解了您)。然后,您需要稍微更改代码。喜欢-

def Find_min_est(est_dict):
        v = min(est_dict['rows'], key=lambda x: x['value'])
        return v['value']

在这种情况下,可迭代的将是列表(my_dict ['rows'])。因此,lambda将获得该列表的单个元素(这是字典)。返回value字段的值即可完成工作。但是最小值将返回该列表的元素,而不是所需的值,因此返回v['value']部分

另一种方法是通过类似-

的生成器表达式调用min()
def Find_min_est(est_dict):
    return min(e['value'] for e in est_dict["rows"])

此解决方案均假定该列表的每个元素都包含键value的值。如果不是这种情况,您可能需要添加一些检查是否存在。