словарь python разделяет каждое значение в списке значений по сумме

63
6

Спасибо за любую помощь. Я новичок в python. Спасибо также за ваше терпение. Я пытаюсь создать словарь, который делит каждое значение в списке значений на сумму всех значений в списке значений, чтобы получить относительную пропорцию, которую значение представляет из общего числа для любого заданного ключа.

Есть около 8000 уникальных ключей, каждый из которых имеет от 1 до 20 значений.

Вот фрагмент кода, который выбирается после успешного объединения двух списков (k, v) в словарь.

(Обратите внимание, что последний цикл for - это ошибка)

from collections import defaultdict

d = defaultdict(list)
for k, v in values:
d[k].append(v)
print list(d.items())

Оператор print генерирует список ключей и список значений, который выглядит следующим образом...., ('030502060106', [20008611.2, 26323531.9, 18983267.9, 38024346.8]),....

for key in d:
dd[key] = sum(d[key])
print list(dd.items())

Оператор print генерирует список ключей и список значений, который выглядит следующим образом (обратите внимание, что значение представляет собой сумму значений выше)...., ('030502060106', [2103339755]),.....

for key in d:
ddd[key] = [d[key]/sum(d[key])]
print list(ddd.items())

Ошибка возникает здесь в цикле for со следующим сообщением об ошибке TypeError: неподдерживаемый тип операндов для /: 'list' и 'float'

Как можно создать новый словарь с ключом и списком значений, где каждое значение в списке значений нормализуется (делится) на сумму значений?

Моделируя его после первого заявления печати для Loop, он будет выглядеть следующим образом... ('030502060106', [0.193619687, 0.254728018, 0.18369762, 0.367954675]),....

спросил(а) 2021-01-25T14:50:11+03:00 5 месяцев назад
1
Решение
64

Используйте список, чтобы просмотреть список значений, разделите их по сумме и верните список.

for key in d:
ddd[key] = [val/sum(d[key]) for val in d[key]]
print list(ddd.items())

ответил(а) 2021-01-25T14:50:11+03:00 5 месяцев назад
45

Попробуй это:


ddd = defaultdict(list)

for key in d:
sum = sum(d[key])
for value in d[key]:
ddd[key].append(value / sum)

ответил(а) 2021-01-25T14:50:11+03:00 5 месяцев назад
45

Ошибка говорит вам о проблеме. В линии

[d[key]/sum(d[key])]

вы пытаетесь использовать оператор деления со списком и поплавком. Списки не могут быть операндом для оператора /. Если вы пытаетесь разделить все элементы в списке на некоторую константу, вы можете сделать это с помощью цикла for.

EDIT: Ответ Хейли более питонов и предпочтительнее для цикла for. Вероятно, лучший способ пойти.

ответил(а) 2021-01-25T14:50:11+03:00 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема