在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
答案 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
的值。如果不是这种情况,您可能需要添加一些检查是否存在。