如果有这样一个json数据集
[
{'a':1,'b':'fire','c':'cambodia','type':'charizard'},
{'a':2,'d':'waterparks','type':'squirtle'},
{'a':3,'f':'thunder','type':'pikachu'}
]
需要将其转换为一组对象,在这些对象中,可以使用相同的类定义这些对象
charizard = Pokemon(row_data)
pickachu = Pokemon(row_data)
squirtle = Pokemon(row_data)
但是属性可以通过点表示法访问,如下所示
charizard.a
pikachu.d
squirtle.a
在传统的课堂上这样做的方法是这样的
class Pokemon(object):
def __init__(self, data):
for k, v in data.items():
setattr(self, k, v)
有没有一种方法可以对namedtuples或DataClass或Attr执行基本相同的操作,它们可以处理不同大小的数据,并具有这些数据类型的所有良好的不变性、repr等功能
对架构中的数据使用attrs。如果您的数据确实有一个模式(即使它包含很多属性),那么您可以使用attrs,甚至可以动态定义数据模式。但如果您的数据是无模式的,则不要在其上定义模式
如果你能举几个真实的例子(至少10个),也许这会帮助我们了解你的确切情况
attrs等人的要点是为数据定义良好的类。所以对你的问题的简短回答是“不”
像您希望的那样动态设置属性不会给您带来太多好处,只不过它可以减少访问数据的输入
更好的方法是使用定义良好的类,其中一个外观可以告诉您需要哪些属性,并将JSON序列化/规范化到其中。有一大堆的包装;例如,对于属性有cattrs。或者只编写一个函数或类方法
您花在显式转换上的时间,在以后调试时会增加十倍
相关问题 更多 >
编程相关推荐