Как делать математические манипуляции с python словарями? - PullRequest
1 голос
/ 25 мая 2020

У меня есть словарь как

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

другой словарь счетчиков как

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

Я хотел бы вычислить пропорции каждого значения ключа как,

В ключ - недавность,

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

Аналогично - в ключевой - частота,

freq=10/12
infreq=2/12

И требуемый вывод будет:

{'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}}

Не могли бы вы написать свой предложения / предложения по нему?

1 Ответ

3 голосов
/ 25 мая 2020

Вы можете сделать это с помощью понимания слов .

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}}

Используйте round для получения значений с точностью 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}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...