如何在Python

时间:2017-07-05 12:44:06

标签: python python-3.x tuples namedtuple

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

我正在查询输出一系列命名元组的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指标。

2 个答案:

答案 0 :(得分:2)

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

sky

答案 1 :(得分:0)

您可以将原始循环更改为总和:

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)