Пример:
dictionary = {"key":[5, "string1"], "key2":[2, "string2"], "key3":[3, "string1"]}
После применения этого понимания dict:
another_dictionary = {key:value for (value,key) in dictionary.values()}
Результат такой:
another_dictionary = {"string1": 5, "string2": 2}
Другими словами, он не суммирует целочисленные значения под тем же ключом, который был элементом списка.
================================================== ===============
Желаемый результат:
another_dictionary = {"string1": 8, "string2": 2}
Для этого можно использовать collections.defaultdict
:
from collections import defaultdict
dictionary = {"key":[5, "string1"], "key2":[2, "string2"], "key3":[3, "string1"]}
d = defaultdict(int)
for num, cat in dictionary.values():
d[cat] += num
print(d)
defaultdict(<class 'int'>, {'string1': 8, 'string2': 2})
Причина, по которой ваш код не работает, заключается в том, что вы не указали логику суммирования или агрегирования. Для этого потребуется либо какая-то операция группировки, либо, как здесь, повторение и добавление соответствующих элементов в новый словарь.
Вы также можете использовать itertools.groupby
:
import itertools
dictionary = {"key":[5, "string1"], "key2":[2, "string2"], "key3":[3, "string1"]}
d= {a:sum(c for _, [c, d] in b) for a, b in itertools.groupby(sorted(dictionary.items(), key=lambda x:x[-1][-1]), key=lambda x:x[-1][-1])}
Выход:
{'string2': 2, 'string1': 8}