0

m 個のキーと値のペアを含む n 個のモデルが与えられた場合、名前付きタプルを使用してその情報を 1 つのオブジェクト内に統合できますか? 統合とは、リファクタリングを意味します。これにより、このオブジェクトを通過させ、そこから特定の情報にアクセスできるようになります。

現在の組織は次のとおりです。

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 などの他の構造を使用してモデル情報を処理するためのより良い方法があるかどうかを知りたいですか?

4

1 に答える 1

1

はい、名前付きタプルを使用できます-辞書内の情報を更新する必要があると言ったところまで。タプルと名前付きタプルは変更できません。したがって、インデックス番号ではなく名前 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)}
>>> 
于 2012-07-12T02:21:18.590 に答える