Python: добавить список в существующий словарь? - PullRequest
0 голосов
/ 25 июня 2019

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

Я попытался извлечь значения из списка, затем выполнить операцию и добавить результаты в другой список. Но я не знаю, как добавить этот список в словарь.

total = 1000

d = {"key_1":150, "key_2":350, "key_3":500}

lst = list(d.values())

percentages = [100 * (i/total) for i in lst]


# Desired dictionary

d

{"key_1": [15%, 150],

"key_2": [35%, 350],

"key_3": [50%, 500]
}

Ответы [ 2 ]

3 голосов
/ 25 июня 2019

Вам лучше избегать промежуточного list и просто обновлять каждую клавишу по ходу:

total = 1000

d = {"key_1":150, "key_2":350, "key_3":500}

for k, v in d.items():
    d[k] = [100 * (v / total), v]

Хотя технически возможно zip ключи dict со значениямииз list, пока ключи не изменены, а порядок list поддерживается в соответствии со значениями, извлеченными из dict, результирующий код будет пахнуть запаха кода,и в любом случае проще просто избежать этого list.

Обратите внимание, что в представлении не будет знака %, поскольку такого понятия, как процентный тип, не существует.Единственный простой способ вставить его туда - это сохранить его как строку, а не float, например, заменив последнюю строку на:

    d[k] = [f'{100 * (v / total)}%', v]

, чтобы отформатировать вычисление как строку, и отправить% на конце.

0 голосов
/ 25 июня 2019

Здесь

total = 1000
d = {"key_1": 150, "key_2": 350, "key_3": 500}
d1 = {k: ['{}%'.format(v * 100 / 1000),v] for k, v in d.items()}
print(d1)

выход

{'key_1': ['15.0%', 150], 'key_2': ['35.0%', 350], 'key_3': ['50.0%', 500]}
...