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
Post a Comment