Python中按days属性查找对象列表最小元素时报dict无days属性如何解决
问题原因
通过json.loads反序列化得到的列表元素为字典类型,Python 中字典不支持.语法访问键对应的值,只能通过[键名]的方式取值,因此触发属性不存在的报错。
解决方案
方案1(最简改法,无需修改数据结构)
直接修改min函数的key逻辑,使用字典取值方式获取days对应值:
maintenance_cycle = min(lists, key=lambda r: r['days'])
方案2(如果需要保留属性访问的写法)
可以将字典转换为支持属性访问的对象,两种常见实现如下:
- 基于
SimpleNamespace快速转换
from types import SimpleNamespace from operator import attrgetter lists = json.loads("[" + data + "]") # 批量将字典转为支持属性访问的对象 obj_list = [SimpleNamespace(**item) for item in lists] maintenance_cycle = min(obj_list, key=attrgetter('days'))
- 基于
dataclass定义结构化类型转换
from dataclasses import dataclass from operator import attrgetter @dataclass class CycleItem: type: str days: int lists = json.loads("[" + data + "]") obj_list = [CycleItem(**item) for item in lists] maintenance_cycle = min(obj_list, key=attrgetter('days'))
内容的提问来源于stack exchange,提问作者Stéphane GRILLON
相关产品推荐
相关产品推荐

