Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

sum over values in python dict except one

Is there a way to sum over all values in a python dict except one by using a selector in

>>> x = dict(a=1, b=2, c=3)
>>> np.sum(x.values())
6

? My current solution is a loop based one:

>>> x = dict(a=1, b=2, c=3)
>>> y = 0
>>> for i in x:
...     if 'a' != i:
...             y += x[i]
... 
>>> y
5

EDIT:

import numpy as np
from scipy.sparse import *
x = dict(a=csr_matrix(np.array([1,0,0,0,0,0,0,0,0]).reshape(3,3)),      b=csr_matrix(np.array([0,0,0,0,0,0,0,0,1]).reshape(3,3)), c=csr_matrix(np.array([0,0,0,0,0,0,0,0,1]).reshape(3,3)))
y = csr_matrix((3,3))
for i in x: 
    if 'a' != i:
        y = y + x[i]
print y

returns (2, 2) 2.0

and

print np.sum(value for key, value in x.iteritems() if key != 'a')

raises

File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-    packages/numpy/core/fromnumeric.py", line 1446, in sum
    res = _sum_(a)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/scipy/sparse/compressed.py", line 187, in __radd__
    return self.__add__(other)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/scipy/sparse/compressed.py", line 173, in __add__
    raise NotImplementedError('adding a scalar to a CSC or CSR '
NotImplementedError: adding a scalar to a CSC or CSR matrix is not supported
like image 256
Milla Well Avatar asked Apr 18 '26 14:04

Milla Well


1 Answers

You could loop over the dict to create a generator for the sum method:

np.sum(value for key, value in x.iteritems() if key != 'a')
like image 78
Martijn Pieters Avatar answered Apr 21 '26 02:04

Martijn Pieters



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!