簡體   English   中英

Python 2.7.12-從嵌套在另一個字典中的列表中替換字典鍵

[英]Python 2.7.12 - Replacing dictionary keys from a list nested in another dictionary

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

我已經搜尋了現有的問題,但無法解決任何問題。 這太菜鳥了。

使用以下方法:

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]

注意,我沒有排序任何內容,因為您的示例似乎沒有排序任何內容。 字典鍵(類別)的順序無關緊要,其他所有內容都由列表中的項目順序確定。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM