如何对 Python 中 API 输出的元组值求和

How to sum tuple values outputted by an API in Python

这是一个相当简单的问题,我正在尝试以最有效的方式解决它。

我正在查询一个输出一系列命名元组的 API,我想对每个输出元组的值进行累加和求和。

即我正在做类似以下的事情:

for time_series in api_query:
    for ts_tuple in time_series.header:
        print(ts_tuple)

这将输出如下内容:

Point(end_time='2017-07-05T12:12:24.471Z', start_time='2017-07-05T12:11:24.471Z', value=0)
Point(end_time='2017-07-05T12:13:24.471Z', start_time='2017-07-05T12:12:24.471Z', value=48)
Point(end_time='2017-07-05T12:14:24.471Z', start_time='2017-07-05T12:13:24.471Z', value=11)
Point(end_time='2017-07-05T12:15:24.471Z', start_time='2017-07-05T12:14:24.471Z', value=0)
Point(end_time='2017-07-05T11:52:24.471Z', start_time='2017-07-05T11:51:24.471Z', value=0)

我需要获取每个 namedtuple 中的值,然后求和。

我得到的是:

   total_foo = []

   for time_series in api_query:
        for ts_tuple in time_series.header:
            total_foo.append(ts_tuple.value)

然后只需在 total_foo 上求和即可。

我想知道是否有人可以建议一种更 pythonic 的方式?我试图摆脱只使用 for 循环并一直附加到列表的做法。

注意:对于某些背景,api 正在通过 google-cloud-python 库查询 Stackdriver 指标。

您可以使用带有嵌套循环的生成器表达式,如下所示:

total = sum(ts_tuple.value for time_series in api_query for ts_tuple in time_series.header)

您可以更改原始循环以也执行求和:

total_foo = 0
for time_series in api_query:
    for ts_tuple in time_series.header:
        print(ts_tuple)
        total_foo += int(ts_tuple.value)