How to add elements from a dictonary of lists in python -
given dictionary of lists
vd = {'a': [1,0,1], 'b':[-1,0,1], 'c':[0,1,1]} i want add lists element wise. want add first element list first element of list b vice versa complexity cannot rely on labels being a, b, c. can anything. second length of dictionary variable. here 3. 30.
the result need list [0, 1, 3]
in short:
>>> map(sum, zip(*vd.values())) [0, 1, 3] explanation
given dictionary:
>>> vd = {'a': [1,0,1], 'b': [-1,0,1], 'c': [0,1,1]} we can get values:
>>> values = vd.values() >>> values [[1, 0, 1], [-1, 0, 1], [0, 1, 1]] then zip them up:
>>> zipped = zip(*values) >>> zipped [(1, -1, 0), (0, 0, 1), (1, 1, 1)] note zip zips each argument; doesn't take list of things zip up. therefore, need * unpack list arguments.
if had 1 list, sum them:
>>> sum([1, 2, 3]) 6 however, have multiple, can map on it:
>>> map(sum, zipped) [0, 1, 3] all together:
>>> map(sum, zip(*vd.values())) [0, 1, 3] extending average rather sum
this approach extensible; example, quite make average elements rather sum them. that, we'd first make average function:
def average(numbers): # have float(...) doesn't integer division. # in python 3, not necessary. return sum(numbers) / float(len(numbers)) then replace sum average:
>>> map(average, zip(*vd.values())) [0.0, 0.3333, 1.0]
Comments
Post a Comment