Python 2.7.12 - замена ключей словаря из списка, вложенного в другой словарь

У меня есть 2 словаря, описывающие категории предметов и значения предметов в разных местах

categories = {'CAT1':['A','B','C'],'CAT2':['D','E','F']
items = {'A':[1.0],'B':[2.5, 1.0], 'C':[2.0], 'D':[0.2, 0.4], 'E':[0.1], 'F':[2.2, 2.4]}

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

new_dict = {'CAT1':[1.0, 2.5, 1.0, 2.0], 'CAT2':[0.2, 0.4, 0.1, 2.2, 2.4]}

Я просмотрел существующие вопросы, но не могу заставить что-либо работать. Слишком новичок в этом.

2 ответа

Решение

Используйте следующий подход:

result = {k: [item for i in sorted(items) if i in v for item in items[i]] 
             for k,v in categories.items()}
print(result)

Выход:

{'CAT2': [0.2, 0.4, 0.1, 2.2, 2.4], 'CAT1': [1.0, 2.5, 1.0, 2.0]}

Насколько я могу судить, ваша "сортировка" результата происходит по порядку оригинальных элементов в словаре категорий.

Начните с перебора ключей и значений словаря категорий:

result = {}
for cat, entries in categories.items(): # cat='CAT1', ent=['A', 'B', 'C']

Легче всего было бы использовать defaultdict. Но вы можете заполнить ваш результирующий словарь теперь пустым списком.

    result[cat] = []

Теперь переберем список записей:

    for entry in entries: # 'A', 'B', 'C'

каждый entry в списке записей является ключом к items словарь, который вы предоставили, так что посмотрите:

        ent_items = items[entry]  # ent_items = [1.0]

Результат этого поиска (ent_items) список чисел с плавающей точкой. Объедините его с правильным списком в словаре результатов:

        result[cat] += ent_items   # result['CAT1'] = [1.0]

Обратите внимание, что я ничего не сортировал, потому что ваш пример ничего не сортирует. Порядок словарных ключей (категорий) не имеет значения, а все остальное определяется последовательностью пунктов в списках.

Другие вопросы по тегам