Python 2.7.12 - 从嵌套在另一个字典中的列表中替换字典键

时间:2017-08-06 07:44:35

标签: python dictionary amalgamation

我有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 个答案:

答案 0 :(得分:0)

使用以下方法:

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]}

答案 1 :(得分: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]

请注意,我没有对任何内容进行排序,因为您的示例似乎没有对任何内容进行排序。字典键(类别)的排序并不重要,其他一切都由列表中的项目序列决定。