myamulla_ciencia
myamulla_ciencia

Reputation: 1488

How to do math manipulations on python dictionaries?

I have a dictionary as

ex_dict_tot={'recency': 12, 'frequency': 12, 'money': 12}

another count dictionary as

ex_dict_count= {'recency': {'current': 4, 'savings': 2, 'fixed': 6},
                'frequency': {'freq': 10, 'infreq': 2},
                 'money': {'med': 2, 'high': 8, 'low': 1, 'md': 1}}

I would like to calculate the proportions of each key values as,

In key - recency,

current=4/12,
savings=2/12,
fixed=6/12

Similarly - in key - frequency,

freq=10/12
infreq=2/12

And the required output would be,

{'recency': {'current': 0.3, 'savings': 0.16, 'fixed': 0.5},
 'frequency': {'freq': 0.83, 'infreq': 0.16},
 'money': {'med': 0.16, 'high': 0.6, 'low': 0.08, 'md': 0.08}}

Could you please write your suggestions/inputs on it?

Upvotes: 0

Views: 733

Answers (1)

Ch3steR
Ch3steR

Reputation: 20659

You can do this with dict comprehension.

out = {key:{k:v/ex_dict_tot[key] for k,v in val.items()} for key,val in ex_dict_count.items()}

out
{'recency': {'current': 0.3333333333333333, 'savings': 0.16666666666666666, 'fixed': 0.5},
 'frequency': {'freq': 0.8333333333333334, 'infreq': 0.16666666666666666}, 
 'money': {'med': 0.16666666666666666, 'high': 0.6666666666666666, 'low': 0.08333333333333333, 'md': 0.08333333333333333}}

Use round to get values with floating-point precision 2.

out = {key:{k:round(v/ex_dict_tot[key],2) for k,v in val.items()} for key,val in ex_dict_count.items()}

out
{'recency': {'current': 0.33, 'savings': 0.17, 'fixed': 0.5},
 'frequency': {'freq': 0.83, 'infreq': 0.17},
 'money': {'med': 0.17, 'high': 0.67, 'low': 0.08, 'md': 0.08}}

Upvotes: 2

Related Questions