2013/4/16 Jaroslav Lukesh <luk...@seznam.cz> > Ahoj a díky za rozšíření obzorů. > > Jsou to data ne zrovna jednoduše vycucaná z databáze, o nějaké dočasné > tabulcev sqlu jsem uvažoval protože je nad tímto selektivně sečteným > výsledkem víc operací, ale připadalo mi to jako ne příliš čisté řešení. > Otrocky s pomocnýma proměnnýma to taky jde, ale chtěl jsem vědět, jeslti na > to není nějaký fígl, protože mi připadalo logické, aby pro práci nad poli a > slovníky bylo aspoň trochu něco jako je v sql. >
Je na to spousta nástrojů, třeba ty itertools. Chce to jen méně zkoušet metodou pokus omyl a více koukat do nápovědy :-) > Ale mám s tím trošku problém, izoloval jsem problém pro tento příklad až > příliš moc, protože se mi nedaří jej rozšířit o 'c', tedy pro tento vstup > (podotýkám jen, že hodnota 'c' je stejná pro všechny 'a'): > > [{'a':4,'b':3,'c':9},{'a':4,'**b':5,'c':9},{'a':1,'b':3,'c':** > 7},{'a':3,'b':2,'c':6}] > > chtěl tento výstup: > > [{'a': 4, 'b': 8, 'c':9}, {'a': 1, 'b': 3, 'c':7}, {'a': 3, 'b': 2, 'c':6}] Jde to třeba takto (upravené řešení od Honzy Javorka): from itertools import groupby from operator import itemgetter def summarize(data): return [{'a': a, 'b': sum(map(itemgetter('b'), group)), 'c': c} for (a, c), group in groupby(data, itemgetter('a', 'c'))] A kdybys to chtěl pomocí cyklů, tak třeba takto: from itertools import groupby from operator import itemgetter def summarize(data): groups = groupby(data, itemgetter('a', 'c')) out = [] for (a, c), group in groups: b = sum(map(itemgetter('b'), group)) out.append({'a': a, 'b': b, 'c': c}) return out Honza
_______________________________________________ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python