Python检查是否输入dict并使用value的最佳方法

2024-10-02 22:32:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一本字典,像:

{
  'cashflowStatements': [
    {
      'endDate': '2019',
      'totalCashFromOperatingActivities': -40743000,
      'capitalExpenditures': -46141000
    },
    {
      'totalCashflowsFromInvestingActivities': 148919000,
      'endDate': '2018',
      'capitalExpenditures': -53753000
    },
    {
      'totalCashflowsFromInvestingActivities': -45493000,
      'endDate': '2017',
    },
    {
      'totalCashflowsFromInvestingActivities': -19651000,
      'endDate': '2016',
      'capitalExpenditures': -26266000
    }
  ]
}

如果这些值在字典中,我想将它们添加到变量中

目前我有以下解决方案:

       for year in dict['cashflowStatements']:
            freeCashflow = 0
            if 'totalCashFromOperatingActivities' in year:
                freeCashflow += year['totalCashFromOperatingActivities']
            if 'capitalExpenditures' in year:
                freeCashflow += year['capitalExpenditures']

有没有更好的方法来做到这一点,也许代码行更少


Tags: 方法代码inforif字典解决方案year
2条回答

也许是这样的:

for year in dict['cashflowStatements']:
    freeCashflow = year.get('totalCashFromOperatingActivities', 0) + year.get('capitalExpenditures', 0)

Pythonic会像这样使用列表理解-

d = {
  'cashflowStatements': [
    {
      'endDate': '2019',
      'totalCashFromOperatingActivities': -40743000,
      'capitalExpenditures': -46141000
    },
    {
      'totalCashflowsFromInvestingActivities': 148919000,
      'endDate': '2018',
      'capitalExpenditures': -53753000
    },
    {
      'totalCashflowsFromInvestingActivities': -45493000,
      'endDate': '2017',
    },
    {
      'totalCashflowsFromInvestingActivities': -19651000,
      'endDate': '2016',
      'capitalExpenditures': -26266000
    }
  ]
}

print(sum([year.get('totalCashFromOperatingActivities', 0) + year.get('capitalExpenditures', 0) for year in d['cashflowStatements']]))

输出:-166903000

再看看这个问题,我们似乎希望freeCashflow仅用列表的最后一个dict中存在的数据之和初始化,然后使用下面的代码

print(d["cashflowStatements"][-1].get('totalCashFromOperatingActivities', 0) + d["cashflowStatements"][-1].get('capitalExpenditures', 0))

输出:-26266000

相关问题 更多 >