Reduce by key in python -


i'm trying think through efficient way in python.

suppose have list of tuples:

[('dog',12,2), ('cat',15,1), ('dog',11,1), ('cat',15,2), ('dog',10,3), ('cat',16,3)] 

and suppose have function takes 2 of these tuples , combines them:

def my_reduce(obj1, obj2):     return (obj1[0],max(obj1[1],obj2[1]),min(obj1[2],obj2[2])) 

how perform efficient reduce 'key' key here first value, final result like:

[('dog',12,1), ('cat',16,1)] 

if want use my_reduce , reduce, can way. it's short, actually:

preparation:

from itertools import groupby operator import itemgetter  pets = [('dog',12,2), ('cat',15,1), ('dog',11,1), ('cat',15,2), ('dog',10,3), ('cat',16,3)]  def my_reduce(obj1, obj2):     return (obj1[0],max(obj1[1],obj2[1]),min(obj1[2],obj2[2])) 

solution:

print [reduce(my_reduce, group)        _, group in groupby(sorted(pets), key=itemgetter(0))] 

output:

[('cat', 16, 1), ('dog', 12, 1)] 

Comments

Popular posts from this blog

java - Spring Data JPA: Why findOne(id) executing delete query internally? -

python - Mongodb How to add addtional information when aggregating? -

java - Incorrect order of records in M-M relationship in hibernate -