Ich habe vor, die Werte in einer Liste von Dictionaries auf eine den jeweiligen Keys zugeordnete Funktion anzuwenden.
Ich hoffe, die Beschreibung von Input und Output im untenstehenden Docstring sind selbsterklärend. Ansonsten bitte nachfragen.
Meine bisherige Lösung sieht so aus (für "stuff" denke ich mir noch einen besseren Namen aus, versprochen ):
Code: Alles auswählen
"""
test script: aggregation of values
input = [
{
'foo': max,
'bar': np.mean,
'baz': sum,
},
{
'foo': 1,
'bar': 2,
'baz': 3,
},
{
'foo': 4,
'bar': 5,
'baz': 6,
},
]
output = {
'foo': 4, # input[0]['foo']([input[1]['foo'], input[2]['foo'], ..., input[n]['foo']])
'bar': 3.5, # input[0]['bar']([input[1]['bar'], input[2]['bar'], ..., input[n]['bar']])
'baz': 9, # input[0]['baz']([input[1]['baz'], input[2]['baz'], ..., input[n]['baz']])
}
"""
import numpy as np
def aggregate(stuff):
"""
aggregate values using functions in stuff[0]
"""
functions = stuff[0]
names = [key for key in sorted(functions)]
params = stuff[1:]
funclist = [x[1] for x in sorted(functions.items())]
paramlist = np.array([x[1] for elem in params for x in sorted(elem.items())]).reshape(len(params),len(params[0])).T
values = [f(p) for f, p in zip(funclist, paramlist)]
result = dict((n, v) for n, v in zip(names, values))
return result
def main():
rein = [
{
'foo': max,
'bar': np.mean,
'baz': sum,
},
{
'foo': 1,
'bar': 2,
'baz': 3,
},
{
'foo': 4,
'bar': 5,
'baz': 6,
},
]
output = aggregate(rein)
print output
if __name__ == '__main__':
main()
Geht das evtl. mit Hilfe von numpy eleganter?
Über Anregung und Kritik würde ich mich freuen.