osdir.com


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

How to multiply dictionary values with other values based on the dictionary's key?


On Sunday, August 19, 2018 at 1:42:29 PM UTC+2, Steven D'Aprano wrote:
> On Sun, 19 Aug 2018 03:15:32 -0700, giannis.dafnomilis wrote:
> 
> > Thank you MRAB!
> > 
> > Now I can get the corresponding dictionary value A[i,j,k,l] for each key
> > in the varsdict dictionary.
> > 
> > However how would I go about multiplying the value of each
> > FEq_(i,_j,_k,_l) key with the A[i,j,k,l] one? Do you have any insight in
> > that?
> 
> Do you want to modify the varsdict values in place?
> 
> varsdict['Feq_(i,_j,_k,_l)'] *= A[i,j,k,l]
> 
> which is a short-cut for this slightly longer version:
> 
> temp = varsdict['Feq_(i,_j,_k,_l)'] * A[i,j,k,l]
> varsdict['Feq_(i,_j,_k,_l)'] = temp
> 
> 
> 
> If you want to leave the original in place and do something else with the 
> result:
> 
> result = varsdict['Feq_(i,_j,_k,_l)'] * A[i,j,k,l]
> print(result)
> 



> Do you want to modify the varsdict values in place? 
> 
> varsdict['Feq_(i,_j,_k,_l)'] *= A[i,j,k,l] 
> 
> which is a short-cut for this slightly longer version: 
> 
> temp = varsdict['Feq_(i,_j,_k,_l)'] * A[i,j,k,l] 
> varsdict['Feq_(i,_j,_k,_l)'] = temp 
> 
> 
> 
> If you want to leave the original in place and do something else with the 
> result: 
> 
> result = varsdict['Feq_(i,_j,_k,_l)'] * A[i,j,k,l] 
> print(result) 
> 

Thanks again for your answers Steven. I will try to explain it simpler because I think I tend to complicate things. 

With your help I have arrived at this point: 
I have the dictionary varsdict (size 5) as below 
Key                        Type        Size     Value 
FEq_(0,_0,_0,_0)           float        1        1.0 
FEq_(0,_0,_1,_1)           float        1        1.0 
FEq_(0,_0,_2,_2)           float        1        1.0 
FEq_(0,_0,_3,_0)           float        1        1.0 
FEq_(0,_0,_4,_1)           float        1        1.0 

and the dictionary B (size 150) as below 
Key                        Type        Size     Value 
FEq_(0,_0,_0,_0)           float        1        1500.0 
FEq_(0,_0,_0,_1)           int          1        0 
... 
FEq_(0,_0,_1,_1)           float        1        3300.0
... 
FEq_(0,_0,_2,_2)           float        1        2200.0
...
FEq_(0,_0,_4,_1)           float        1        4000.0

for dictionary B the i,j,k,l ranges run as far as my input ranges when I started the model. So now I only want to multiply the values with the same keys with each other and get the sum of it.

result = Sum(varsdict['FEq_(i,_j,_k,_l)']*B['FEq_(i,_j,_k,_l)']

As I mentioned above I have been trying this with 
{k : v * B[k] for k, v in varsdict.items() if k in B} 

or 

for key in varsdict: 
    if key in B: 
        print(int(varsdict[key]) * int(B[key])) 

but all I get is an empty dictionary.