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]
Обратите внимание, что я ничего не сортировал, потому что ваш пример ничего не сортирует. Порядок словарных ключей (категорий) не имеет значения, а все остальное определяется последовательностью пунктов в списках.