1

処理する必要があるマルチレベルの dict オブジェクトを取得します。マルチレベルとは、トップレベルの辞書に、値として辞書を持ついくつかのキーがあることを意味します。

例えば

{'l1key1' : 'value1'
 'l1key2' : {
             'l2key1': 'something'
             'l2key2': {
                        'l3key1': 'something' 
                        'l3key2': 'something else'
                       }
            }
 'l1key3' : 'some other value'
}

実際の口述は巨大です。10 個以上のキーと 4 つのレベルがあります。いくつかのオプションのキーが欠落している場合があります。

コードを整理するためにクラスを作成しました。例えば

Class Level3():
    def __init__(self, l3dict):
        if not l3dict:
            self.exists = False
        else:
            self.exists = True
            self.l3key1 = l3dict.get('l3key1') 
            self.l3key2 = l3dict.get('l3key2')

Class Level2():
    def __init__(self, l2dict):
        if not l2dict:
            self.exists = False
        else:
            self.exists = True
            self.l2key1 = l2dict.get('l2key1') 
            self.l2key2 = Level3(l3dict.get('l2key2'))

Class Level1():
    def __init__(self, mydict):
            self.l1key1 = mydict.get('l1key1') 
            self.l1key2 = Level2(mydict.get('l1key2'))
            self.l1key3 = mydict.get('l1key3')


#usage
mydict = json.loads(thejson)     #the json I am getting as input
myobject = Level1(mydict)

私の質問は、クラスを作成する代わりに、スクリプトで直接辞書を使用する必要があるかどうかです。

実行時間が短いことが重要です。辞書からクラスを初期化すると遅くなりますか?

編集::私はそれを計った。クラスの初期化には平均 80 マイクロ秒かかります。アプリケーションは 250 ミリ秒以内にすべての処理を完了する必要があります。ここで、80 マイクロ秒を許容できるかどうかを判断するために、処理にかかった時間を確認する必要があります。

答えてくれてありがとう。また、データの処理には Cython を使用します。

4

1 に答える 1

1

この質問に答えるには、既に設定した辞書を使用する方が高速です。コメントで述べたように、CPython でのオブジェクトの作成は、些細なものであっても非常にコストがかかります。

于 2013-09-13T17:10:13.080 に答える