<br><div class="gmail_quote">2013/4/16 Jaroslav Lukesh <span dir="ltr"><<a href="mailto:lukesh@seznam.cz" target="_blank">lukesh@seznam.cz</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Ahoj a díky za rozšíření obzorů.<br>
<br>
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.<br>
</blockquote><div><br></div><div><br></div><div>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 :-)</div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
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'):<br>
<br>
[{'a':4,'b':3,'c':9},{'a':4,'<u></u>b':5,'c':9},{'a':1,'b':3,'c':<u></u>7},{'a':3,'b':2,'c':6}]<br>
<br>
chtěl tento výstup:<br>
<br>
[{'a': 4, 'b': 8, 'c':9}, {'a': 1, 'b': 3, 'c':7}, {'a': 3, 'b': 2, 'c':6}]</blockquote><div><br></div><div><br></div><div>Jde to třeba takto (upravené řešení od Honzy Javorka):</div>
<div><br></div><div><div>from itertools import groupby</div><div>from operator import itemgetter</div></div><div><br></div><div>def summarize(data):</div><div> return [{'a': a, 'b': sum(map(itemgetter('b'), group)), 'c': c} for (a, c), group in groupby(data, itemgetter('a', 'c'))]</div>
<div><br></div><div><br></div><div>A kdybys to chtěl pomocí cyklů, tak třeba takto:</div><div><br></div><div><div>from itertools import groupby</div><div>from operator import itemgetter</div></div><div><div><br></div><div>
def summarize(data):</div><div> groups = groupby(data, itemgetter('a', 'c'))</div><div> out = []</div><div> for (a, c), group in groups:</div><div> b = sum(map(itemgetter('b'), group))</div>
<div> out.append({'a': a, 'b': b, 'c': c})</div><div> return out</div></div><div><br></div><div><br></div><div>Honza</div></div>