Во-первых, у вас есть ошибка в том, как вы создали диктат index
.У вас должны быть списки в качестве элементов для каждого словаря, у вас есть наборы.Наборы автоматически дедуплицируются, поэтому вы не сможете получить правильный счет отсюда.
Вы должны исправить индекс так:
index={'chair':['one','two','two','two'],'table':['two','three','three']}
Вы можете использовать Модуль счетчика в Python 3, который является подклассом модуля dict
, для генерации того, что вы хотите для каждой записи в indexCalc
.Счетчик создаст словарь с ключом, и количество раз, когда этот ключ существует в коллекции.
indexCalc = {k, Counter(v) for k, v in index}
indexCalc
выглядит так:
{'chair': Counter({'two': 3, 'one': 1}), 'table': Counter({'three': 2, 'two': 1})}
Мы можем легконайдите индекс, соответствующий максимальному значению в каждом под-словаре:
indexMax = {k: max(indexCalc[k].values()) for k in indexCalc}
indexMax
выглядит так:
{'chair': 3, 'table': 2}
Вы можете создать indexCalcMax
со следующим пониманием, что немного уродливо:
indexCalcMax = {k: {val: indexCalc[k][val] / indexMax[k] for val in indexCalc[k]} for k in indexCalc}
, что является переводом словосочетания этого цикла:
for k in indexCalc:
tmp = {}
for val in indexCalc[k]:
tmp[val] = indexCalc[k][val] / float(indexMax[k])
indexCalcMax[k] = tmp