python如何按条件汇总列表中的值

时间:2016-08-06 04:19:06

标签: python list

我在python中有以下列表:

[{'a':4,'b':40},{'a':6, 'b':60}, {'a':3, 'b':90}, {'a':7, 'b':95}]

'b'值按升序排列。

我也有一个num变量,比如num=25

我需要的是建立一个列表,在其中我总结所有'a',直到'b'之间的差异至少为num。

因此,对于此示例,结果应为:

[{'a':13, 'b':50}, {'a':9, 'b':30}]
  • 13是4 + 6 + 3(前3'a的总和)
  • 50是90-40(第三个'b'减去第一个'b')
  • 9是6 + 3(第二和第三'a'的总和)
  • 30是90-60(第三个'b'减去第二个'b')

只有两个元素,因为从第三个元素我们不能有'b大于num的差异。

我编写了这个有效的代码,但我使用了循环循环,它看起来比c代码更多,而不是python代码。

def get_new_data(data, time_length):
    new_data=[]
    for i in range(0,len(data)):
        sum_data = 0
        for j in range(i,len(data)):
            sum_data += data[j]['a']
            diff = data[j]['b'] - data[i]['b']
            if diff>=time_length:
                new_data.append({'a':sum_data, 'b':diff})
                break
    return new_data

data = [{'a':4,'b':40},{'a':6, 'b':60}, {'a':3, 'b':90}, {'a':7, 'b':95}] 
print (data) new_data = get_new_data(data, 25) print (new_data)

是否有任何pythonic方法可以使用尽可能少的代码来完成它。

谢谢! 大卫

1 个答案:

答案 0 :(得分:0)

使代码更“pythonic”的唯一方法可能是使用enumerate()而不是rang(len(object))。除此之外,它几乎与pythonic一样。

相关问题