<div dir="ltr"><div><div>Ha, že je v operator i itemgetter jsem zapomněl :-) Pak je to ještě kompaktnější one-liner.<br><br>def summarize(data):<br>    return (<br>        {'a': val, 'b': sum(map(itemgetter('b'), group))}<br>

        for (val, group)<br>        in groupby(data, key=itemgetter('a'))<br>    )<br><br></div>Díky za opravu.<br><br></div>H<br></div><div class="gmail_extra"><br><br><div class="gmail_quote">2013/4/16 Jan Bednařík <span dir="ltr"><<a href="mailto:jan.bednarik@gmail.com" target="_blank">jan.bednarik@gmail.com</a>></span><br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div>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.</div>

<div><br></div>

<div>Jen bych to lehce vylepšil použitím operator.itemgetter místo těch lambda funkcí, tzn.:</div><div><br></div><div>from operator import itemgetter</div><div><br></div><div>get_a = itemgetter('a')</div><div>get_b = itemgetter('b')</div>

<div class="HOEnZb"><div class="h5">

<div><br><br><br><div class="gmail_quote">2013/4/15 Honza Javorek <span dir="ltr"><<a href="mailto:jan.javorek@gmail.com" target="_blank">jan.javorek@gmail.com</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">



<div dir="ltr"><div><div>Jde to samozřejmě v podstatě one-linerem, ale bude to nečitelný.<br><br><br><br>from itertools import groupby<br><br><br>def summarize(data):<br>    get_b = lambda x: x['b']<br>    get_a = lambda x: x['a']<br>





    return (<br>        {'a': val, 'b': sum(map(get_b, group))}<br>        for (val, group)<br>        in groupby(data, key=get_a)<br>    )<br><br>data = [{'a': 4, 'b': 3}, {'a': 4, 'b': 5}, {'a': 1, 'b': 3}, {'a': 3, 'b': 2}]<br>





print list(summarize(data))  # [{'a': 4, 'b': 8}, {'a': 1, 'b': 3}, {'a': 3, 'b': 2}]<br><br><br><br></div>Já bych to udělal normálně cyklama, ať se v tom jde vyznat.<br><br>





</div>H<br><div><div><br></div></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">2013/4/15 starenka . <span dir="ltr"><<a href="mailto:starenka0@gmail.com" target="_blank">starenka0@gmail.com</a>></span><div>



<div><br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Ahoj, dal sem si malyho panaka, abych to pochopil, ale porad nechapu,<br>
pokud by ti nahodou slo o sumu cisel u klicu, tak collections.Counter:<br>
<br>
>>> import collections<br>
>>> c = collections.Counter()<br>
>>> for one in [{'a':4,'b':3},{'a':4,'b':5},{'a':1,'b':3},{'a':3,'b':2}]:<br>
...     c.update(one)<br>
...<br>
>>> c<br>
Counter({'b': 13, 'a': 12})<br>
<br>
Ale asi chces neco jinyho, v tom pripade mi to asi lip vysvetli,<br>
protoze jsem z pomalejsich<br>
<br>
s<br>
---<br>
In Perl you shoot yourself in the foot, but nobody can understand how<br>
you did it. Six months later, neither can you. | print<br>
'aknerats'[::-1]<br>
<br>
<br>
2013/4/15 Jaroslav Lukesh <<a href="mailto:lukesh@seznam.cz" target="_blank">lukesh@seznam.cz</a>>:<br>
<div><div>> Dobrý den,<br>
><br>
> existuje na toto nějaký jednoduchý fígl?<br>
><br>
> mám zdroj (první dva slovníky jsou za sebou abyste je nemuseli hledat, jinak<br>
> jsou rozmístěná všeljak)<br>
> [{'a':4,'b':3},{'a':4,'b':5},{'a':1,'b':3},{'a':3,'b':2}]<br>
><br>
> a chci ve výsledku sesumírovat všecky b podle stejného klíče a, takto:<br>
><br>
> [{'a':4,'b':8},{'a':1,'b':3},{'a':3,'b':2}]<br>
><br>
> hodnota klíče a je obecná, tedy je to text, ne číslo.<br>
><br>
> Děkuji, JL.<br>
> _______________________________________________<br>
> Python mailing list<br>
> <a href="mailto:Python@py.cz" target="_blank">Python@py.cz</a><br>
> <a href="http://www.py.cz/mailman/listinfo/python" target="_blank">http://www.py.cz/mailman/listinfo/python</a><br>
_______________________________________________<br>
Python mailing list<br>
<a href="mailto:Python@py.cz" target="_blank">Python@py.cz</a><br>
<a href="http://www.py.cz/mailman/listinfo/python" target="_blank">http://www.py.cz/mailman/listinfo/python</a><br>
</div></div></blockquote></div></div></div><br></div>
<br>_______________________________________________<br>
Python mailing list<br>
<a href="mailto:Python@py.cz" target="_blank">Python@py.cz</a><br>
<a href="http://www.py.cz/mailman/listinfo/python" target="_blank">http://www.py.cz/mailman/listinfo/python</a><br></blockquote></div><br></div>
</div></div><br>_______________________________________________<br>
Python mailing list<br>
<a href="mailto:Python@py.cz">Python@py.cz</a><br>
<a href="http://www.py.cz/mailman/listinfo/python" target="_blank">http://www.py.cz/mailman/listinfo/python</a><br></blockquote></div><br></div>