Разделение между диктатами - PullRequest
2 голосов
/ 28 апреля 2019

У меня два дикта:

dict_1 = {'A': ['red', 'red', 'blue'],
          'B': ['red', 'green'],
          'C': ['blue', 'green'], ....}

dict_2 = {'A': Counter({'red': 2, 'blue': 1}),
          'B': Counter({'red': 1, 'green': 1}),
          'C': Counter({'blue': 1, 'green': 1}), ....}

Мне нужно сделать простое деление между ними, а затем построить их попарно. Желаемый результат, как это или все, что может сделать разделение:

fraction = {'A': [2/3, 1/3],
            'B': [1/2, 1/2],
            'C': [1/2, 1/2], ....} 

Прямо сейчас я могу разделить только первую цифру, любой совет будет оценен по достоинству! Вот мой код:

fraction = { key: [v/len(colorz)] for namez, colorz in dict_1.items() 
                          for name, color in dict_2.items() 
                          for k, v in color.items() }

Ответы [ 2 ]

4 голосов
/ 28 апреля 2019

.count - это довольно быстро , поэтому я не использую dict_2 с Counter, но его можно использовать.

fraction = {k: [l.count(e)/len(l) for e in set(l)] for k, l in dict_1.items()}

но это должно быть коротко, не обязательно эффективно. Если это должно быть быстрее, вы можете сделать что-то еще. если вы хотите их как строки, то

fraction = {k: [f'{e.count(l)}/{len(l)}' for e in set(l)] for k, l in dict_1.items()}

и если вы хотите, чтобы они были в виде строк с уменьшенными дробями, используйте модуль fraction

2 голосов
/ 28 апреля 2019

Версия с использованием дробей.

from fractions import Fraction
{k: [Fraction(v[i], sum(v.values())) for i in v] for k, v in dict_2.items()}
...