2017-07-16 56 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))