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:
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
Ahoj,
nie som si isty, ci na toto najdes nejaky 'jednoduchy figel'. Proste to prejdi
jednym cyklom a hodnoty spocitaj do druheho slovniku.
azur
__
Od: Jaroslav Lukesh luk...@seznam.cz
Komu: Konference PyCZ python@py.cz
Dátum:
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,
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