[python] Suma podle klice slovniku v seznamu

Honza Javorek jan.javorek na gmail.com
Pondělí Duben 15 22:33:46 CEST 2013


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 . <starenka0 na 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 <lukesh na 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 na py.cz
> > http://www.py.cz/mailman/listinfo/python
> _______________________________________________
> Python mailing list
> Python na py.cz
> http://www.py.cz/mailman/listinfo/python
>
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://www.py.cz/pipermail/python/attachments/20130415/42c2ae9b/attachment.html>


Další informace o konferenci Python