Reputation: 11
I need some help in order to write good code to substract matrix.
For example: sparse_matrices([{(1, 3): 2, (2, 7): 1}, {(1, 3): 6, (9,10): 7}, {(2,7): 0.5, (4,2): 10}])
Output:{(1, 3): -4, (2, 7): 0.5, (9, 10): -7, (4,2): -10}
I Dont want to use numpy
lst=([{(1, 3): 2, (2, 7): 1}, {(1, 3): 6, (9,10): 7}, {(2,7): 0.5, (4,2): 10}])
A= lst[0]
B= lst[1]
C= lst[2]
F={}
for k, v in A.items():
for k1,v1 in B.items():
for k2,v2 in C.items():
F[k] =(v-(B.get(k,0)+C.get(k,0)))
print(F)
>> {(1, 3): -4, (2, 7): 0.5}
Upvotes: 0
Views: 38
Reputation: 231738
In [219]: lst=([{(1, 3): 2, (2, 7): 1}, {(1, 3): 6, (9,10): 7}, {(2,7): 0.5, (4,2): 10}])
Using defaultdict for convenience:
In [220]: from collections import defaultdict
In [221]: dd = defaultdict(int)
In [222]: dd
Out[222]: defaultdict(int, {})
In [223]: dd.update(lst[0])
In [224]: dd
Out[224]: defaultdict(int, {(1, 3): 2, (2, 7): 1})
In [225]: for adict in lst[1:]:
...: for k,v in adict.items():
...: dd[k] = dd[k]-v
...:
In [226]: dd
Out[226]: defaultdict(int, {(1, 3): -4, (2, 7): 0.5, (9, 10): -7, (4, 2): -10})
With a regular dict
we have to use a conditional get
, that returns 0 if the key isn't found.
In [227]: dd = dict()
In [228]: dd.update(lst[0])
In [229]: for adict in lst[1:]:
...: for k,v in adict.items():
...: val = dd.get(k,0)
...: dd[k] = val-v
...:
In [230]: dd
Out[230]: {(1, 3): -4, (2, 7): 0.5, (9, 10): -7, (4, 2): -10}
Upvotes: 1