Myslím že to využití groupby je parádní. Je to snadno čitelné, jednoduché a elegantní řešení. Těžko to půjde napsat čitelnějí pomocí cyklů. Ostatně právě kvůli tomuto příkladu existuje funkce groupby.
Jen bych to lehce vylepšil použitím operator.itemgetter místo těch lambda funkcí, tzn.: from operator import itemgetter get_a = itemgetter('a') get_b = itemgetter('b') 2013/4/15 Honza Javorek <jan.javo...@gmail.com> > Jde to samozřejmě v podstatě one-linerem, ale bude to nečitelný. > > > > from itertools import groupby > > > def summarize(data): > get_b = lambda x: x['b'] > get_a = lambda x: x['a'] > return ( > {'a': val, 'b': sum(map(get_b, group))} > for (val, group) > in groupby(data, key=get_a) > ) > > data = [{'a': 4, 'b': 3}, {'a': 4, 'b': 5}, {'a': 1, 'b': 3}, {'a': 3, > 'b': 2}] > print list(summarize(data)) # [{'a': 4, 'b': 8}, {'a': 1, 'b': 3}, {'a': > 3, 'b': 2}] > > > > Já bych to udělal normálně cyklama, ať se v tom jde vyznat. > > H > > > > 2013/4/15 starenka . <staren...@gmail.com> > > Ahoj, dal sem si malyho panaka, abych to pochopil, ale porad nechapu, >> pokud by ti nahodou slo o sumu cisel u klicu, tak collections.Counter: >> >> >>> import collections >> >>> c = collections.Counter() >> >>> for one in [{'a':4,'b':3},{'a':4,'b':5},{'a':1,'b':3},{'a':3,'b':2}]: >> ... c.update(one) >> ... >> >>> c >> Counter({'b': 13, 'a': 12}) >> >> Ale asi chces neco jinyho, v tom pripade mi to asi lip vysvetli, >> protoze jsem z pomalejsich >> >> s >> --- >> In Perl you shoot yourself in the foot, but nobody can understand how >> you did it. Six months later, neither can you. | print >> 'aknerats'[::-1] >> >> >> 2013/4/15 Jaroslav Lukesh <luk...@seznam.cz>: >> > Dobrý den, >> > >> > existuje na toto nějaký jednoduchý fígl? >> > >> > mám zdroj (první dva slovníky jsou za sebou abyste je nemuseli hledat, >> jinak >> > jsou rozmístěná všeljak) >> > [{'a':4,'b':3},{'a':4,'b':5},{'a':1,'b':3},{'a':3,'b':2}] >> > >> > a chci ve výsledku sesumírovat všecky b podle stejného klíče a, takto: >> > >> > [{'a':4,'b':8},{'a':1,'b':3},{'a':3,'b':2}] >> > >> > hodnota klíče a je obecná, tedy je to text, ne číslo. >> > >> > Děkuji, JL. >> > _______________________________________________ >> > Python mailing list >> > Python@py.cz >> > http://www.py.cz/mailman/listinfo/python >> _______________________________________________ >> Python mailing list >> Python@py.cz >> http://www.py.cz/mailman/listinfo/python >> > > > _______________________________________________ > Python mailing list > Python@py.cz > http://www.py.cz/mailman/listinfo/python >
_______________________________________________ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python