2017-07-16 9 views
0

私は、カスタム財務比率の生成を自動化するために、XBRLデータから大きな辞書を作成しています。次のコードはうまくいきますが、辞書項目を参照するより良い方法があれば、辞書名を変数から取り出すたびに書き出す必要はありません。Pythonのたびに辞書を参照せずに辞書値を取得

FinStatItems = {'GainOnSaleOfRealEstate': 0, 'DepreciationAndAmortization': 104044000.0, 'NetIncome': -4086000.0, 'ImpairmentOnInvestmentsInRealEstate': 122472000.0} 
NAREIT_FFO = FinStatItems['NetIncome'] + FinStatItems['DepreciationAndAmortization'] + FinStatItems['ImpairmentOnInvestmentsInRealEstate'] - FinStatItems['GainOnSaleOfRealEstate'] 

print('NAREIT FFO = ' + str(NAREIT_FFO)) 

この行を記述するためのより良い方法があります:

NAREIT_FFO = FinStatItems['NetIncome'] + FinStatItems['DepreciationAndAmortization'] + FinStatItems['ImpairmentOnInvestmentsInRealEstate'] - FinStatItems['GainOnSaleOfRealEstate'] 
+2

どのようにより良いのリストを参照することができますか?キーによる値の取得は 'O(1)'です。 – jonrsharpe

+0

あなたの主な関心事は何ですか...? – deceze

+0

'' 'fsi = FinStatItems'''は簡単です。' '' fsi ['xyz'] '' 'です。 – wwii

答えて

0

あなたが探しているすべては少しのコードの美学であるならば、あなたは引数、例えばのリストを取ることができたoperator.itemgetter()を使用することができます。

>>> import operator as op 
>>> fn = op.itemgetter('NetIncome', 'DepreciationAndAmortization', 'ImpairmentOnInvestmentsInRealEstate') 
>>> NAREIT_FFO = sum(fn(FinStatItems)) - FinStatItems['GainOnSaleOfRealEstate'] 

しかし、これは元のコードより効率的ではありません。 fn()を再利用したい場合にのみ、本当に便利です。

+0

お世話になりました。変数名を短くするだけで、この特定のアプリケーションに最適です。しかし、itemgetterはおそらく他の部分に非常に便利になるでしょう! – Andrew

0

あなたはアイテム

FinStatItems = {'GainOnSaleOfRealEstate': 0, 'DepreciationAndAmortization': 104044000.0, 'NetIncome': -4086000.0, 'ImpairmentOnInvestmentsInRealEstate': 122472000.0} 
items = ['NetIncome', 'DepreciationAndAmortization', 'ImpairmentOnInvestmentsInRealEstate', 'GainOnSaleOfRealEstate'] 
NAREIT_FFO = sum(FinStatItems[item] for item in items[:-1]) - FinStatItems[items[-1]] 

print('NAREIT FFO = ' + str(NAREIT_FFO))