2012-07-11 42 views
0

給定n個包含m個鍵:值對的模型,可以使用namedtuples來合併一個對象內的信息嗎?通過整合,我的意思是重構,這樣我就可以傳遞這個對象並從中訪問特定位的信息。使用namedtuples合併多個字典

它是如何組織目前:

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

是的,你可以使用namedtuples - 直到你說你必須更新字典裏面的信息。 元組和指定的元組都是不可修改的。 因此,如果您想要按名稱ratehr而不是索引號引用您的數據,則應使用嵌套字典結構 - 或創建一個簡單的類來保存您的數據。

爲此創建自定義類的好處是,您可以通過在該類上擁有__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)} 
>>> 
+0

注:不可變的容器中,如TUP le可以包含可變項目 – jfs 2012-07-12 03:29:57