给定n个包含m个key:value对的模型,是否可以使用named元组将该信息合并到一个对象中?通过合并,我的意思是重构,这样我就可以传递这个对象并从中访问特定的信息。
目前如何组织:
Model_1_Dict = {'key1':('value1','value2','value3'),'key2':('value1','value2','value3')}
Model_2_Dict = {'key1':('value1','value2','value3'),'key2':('value1','value2','value3')}
每个模型字典每个键有3个值对。键表示一个独立的变量名称(来自回归模型),这些值代表β系数,计算值(x)和相关函数......语义上如下:
>>> Model_1_Dict["Variable Name"]
("Beta Coefficient", "Calculated Value", "myClass.myFunction")
Model_1_Dict["Variable Name"][1]
稍后会在代码中更新。我可以在初始化时传递= None
,然后在计算时更新值。或者稍后将值附加到值列表对象(我认为这不是问题)。
我想知道是否有更好的方法来处理使用其他结构的模型信息,例如namedtuples?
答案 0 :(得分:1)
是的,你可以使用namedtuples - 直到你说你必须更新字典内的信息。 元组和命名元组都不可修改。 因此,如果您希望按照名称速率而不是索引号对数据进行操作,则应使用嵌套字典结构 - 或者创建一个简单的类来保存数据。
为此创建自定义类的优点是,您可以通过在类上添加__slots__
属性来限制分配给它的名称,并且可以自定义__repr__
对象,以便在检查时看起来很好 -
一些事情:
class Data(object):
__slots__ = ("beta", "calculated", "function")
def __init__(self, beta=None, calculated=None, function=None):
self.beta = beta; self.calculated = calculated; self.function = function
def __repr__(self):
return "(%s, %s, %s)" % (self.beta, self.calculated, self.function)
其中的工作原理如下:
>>> Model_1_Dict = {'key1':Data('value1','value2','value3') }
>>>
>>> Model_1_Dict
{'key1': (value1, value2, value3)}
>>> Model_1_Dict["key1"].beta = "NewValue"
>>> Model_1_Dict
{'key1': (NewValue, value2, value3)}
>>>