使用namedtuples来合并多个词典

时间:2012-07-11 23:19:12

标签: python

给定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?

1 个答案:

答案 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)}
>>>