3 ms·
Use intermediate steps: keyOf = itemgetter("myKey") valueOf = itemgetter("myValue") filtered = (item for item in myList if valueOf(item) > 5) g
by js2 4y ago
Use intermediate steps:
keyOf = itemgetter("myKey")
valueOf = itemgetter("myValue")
filtered = (item for item in myList if valueOf(item) > 5)
grouped = groupby(sorted(filtered, key=keyOf), keyOf)
result = {key: sum(valueOf(item) for item in group) for key, group in grouped}
- gigatexal 4y agoOoh I like this. That’s about what I would do as well.
- musicale 4y agoCould you save a line by replacing valueOf(item) with item.value?
- js2 4y agoOP wrote the code as if the list items were dictionaries, so I just made that pythonic. If they are objects whose attributes we care about then we can get rid of the two getters altogether which are mostly there to make the code more legible but also remove duplication. You could also switch them to attrgetters.