Python list group and sum with more fields

后端 未结 4 516
情深已故
情深已故 2021-01-26 05:08

I have a list with two integer fields which I would like to sum (string,integer, integer)

myList= [[[\"26-07-2017\",2,0], [\"26-07-2017\",3,0], [\"27-07-2017\",         


        
4条回答
  •  清歌不尽
    2021-01-26 05:45

    You can use itertools.groupby to group the items on the date, then use reduce to sum numbers in each group:

    from itertools import groupby
    
    lst = [[k] + reduce(lambda x, y: [y[1]+x[1], y[2]+x[2]], g) 
                              for k, g in groupby(myList[0], lambda x: x[0])]
    print [lst]
    # [[['26-07-2017', 5, 0], ['27-07-2017', 1, 1]]]
    

    Python 3 requires importing reduce: from functools import reduce


    You could avoid using the relatively less intuitve reduce (also in submission to GvR) by taking the sums in a for loop:

    from itertools import groupby
    
    lst = []
    for k, g in groupby(myList[0], lambda x: x[0]):
       g =  [sum(d) for d in zip(*(t[1:] for t in g))]
       lst.append([k] + g)
    print [lst]
    # [[['26-07-2017', 5, 0], ['27-07-2017', 1, 1]]]
    

提交回复
热议问题