查找字典数组的max和min的python方法

2024-05-29 10:28:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我所拥有的:

vec=[{'max': 23.425, 'date': u'2017-07-18', 'ismax': False, 'ismin': False, 'min': 14.615}, 
     {'max': 23.83, 'date': u'2017-07-19', 'ismax': False, 'ismin': False, 'min': 14.765}, 
     {'max': 24.07, 'date': u'2017-07-20', 'ismax': False, 'ismin': False, 'min': 14.985}]

现在我想找出总的最小值和最大值;我试过这样做:

^{pr2}$

但上面写着:

Type error indexes must be integers not str

我知道冒号代表“所有指数的循环”,所以我做错了什么?在


Tags: integersfalsedatetypenoterrorbemin
3条回答

vec[:]只是复制列表。因此vec[:]['min']试图在副本中查找{},但这不起作用,因为列表索引必须是整数。在

生成器表达式很好:

mini = min(v['min'] for v in vec)

只需在^{}/^{}函数中使用key参数

min(vec, key=lambda x: x['min'])
max(vec, key=lambda x: x['max'])

其中min()给出了:

^{pr2}$

单击上面的python doc链接以获取详细信息。在

您还可以使用minmax函数和key参数:

In [966]: max(vec, key=lambda x: x['max'])['max']
Out[966]: 24.07

In [967]: min(vec, key=lambda x: x['min'])['min']
Out[967]: 14.615

您可以使用operator.itemgetter来加快速度。在

将这些函数与键一起使用将返回包含max/min的整个subdict,因此您需要使用索引来检索所需的值。在


计时:

设置:vec = [{ 'max' : random.randint(1, 1000), 'min' : random.randint(1, 1000)} for x in range(100000)]

^{pr2}$

相关问题 更多 >

    热门问题