如何在Python中解析字典,实现点语法访问其元素?
问题:如何让字典支持点语法访问元素?
我有如下文件:file.py
data = { "SerialNumber": 1234, "ActualCount": "TY" }
在app.py中我可以导入该文件,并通过如下方式调用字典:app.py
import file as file print(file.data['SerialNumber'])
请问是否存在某种解析器,可解析此类字典对象,让我能通过如下方式获取其元素:
print(file.data.SerialNumber) print(file.data.ActualCount)
解决方案
方法1:使用types.SimpleNamespace(推荐,内置模块)
Python内置的types.SimpleNamespace可以直接将字典转换为支持点语法的对象,用法简洁:
修改app.py:
import file as file from types import SimpleNamespace # 将字典转为SimpleNamespace实例 data_obj = SimpleNamespace(**file.data) print(data_obj.SerialNumber) # 输出:1234 print(data_obj.ActualCount) # 输出:TY
如果希望直接在file.py中定义可点访问的对象,也可以直接修改该文件:
from types import SimpleNamespace data = SimpleNamespace( SerialNumber=1234, ActualCount="TY" )
之后在app.py中导入后可直接使用点语法:
import file as file print(file.data.SerialNumber)
方法2:自定义转换类(支持嵌套字典)
如果需要处理嵌套字典的场景,可自定义一个简单的转换类:
class DictToObj: def __init__(self, data): for key, value in data.items(): # 递归处理嵌套字典 if isinstance(value, dict): setattr(self, key, DictToObj(value)) else: setattr(self, key, value)
使用示例:
import file as file data_obj = DictToObj(file.data) print(data_obj.SerialNumber)
方法3:使用dataclasses(适合结构化固定数据)
如果你的数据结构固定,使用dataclasses能获得类型提示、结构化验证等额外优势:
from dataclasses import dataclass @dataclass class Data: SerialNumber: int ActualCount: str # 从字典初始化实例 data = Data(**{ "SerialNumber": 1234, "ActualCount": "TY" })
之后同样可通过data.SerialNumber访问对应值。
内容的提问来源于stack exchange,提问作者S Andrew
相关产品推荐
相关产品推荐

