簡體   English   中英

按鍵對嵌套字典進行排序

[英]sort nested dictionary by keys

如何根據鍵對字典進行排序?

db1 = {
        'Diane':   {'Laundry': 2,   'Cleaning': 4, 'Gardening': 3},
        'Betty':   {'Gardening': 2, 'Tutoring': 1, 'Cleaning': 3},
        'Charles': {'Plumbing': 2,  'Cleaning': 5},
        'Adam':    {'Cleaning': 4,  'Tutoring': 2, 'Baking': 1},
        }


def by_job(db1 : {str:{str:int}}) -> {str:{str:int}}:
    dt = {}
    for name in db1:
        for skill in db1[name]:
            if skill not in dt:
                dt[skill] = {}
    for name in db1:
        for skill in db1[name]:
            if skill in dt:
                dt[skill][name] = db1[name][skill]
    return dt

我得到的結果看起來像這樣

{'Laundry': {'Diane': 2}, 
'Cleaning': {'Diane': 4, 'Betty': 3, 'Charles': 5, 'Adam': 4}, 
'Gardening': {'Diane': 3, 'Betty': 2}, 
'Tutoring': {'Betty': 1, 'Adam': 2}, 
'Plumbing': {'Charles': 2}, 
'Baking': {'Adam': 1}}

不過,我想要這個

{'Baking': {Adam': 1},
 'Cleaning': {'Adam': 4, 'Betty': 3, 'Charles': 5, 'Diane': 4},
 'Gardening': {'Betty', 2, 'Diane': 3},
 'Laundry': {'Diane': 2},
 'Plumbing': {'Charles': 2},
 'Tutoring': {'Adam': 2, 'Betty', 1}}

通過避免使用 OrderDict 來做到這一點的最佳方法是什么?

Python 字典按添加鍵的順序排序。 您可以通過對結果的鍵進行排序來創建新字典。

def by_job(db1 : {str:{str:int}}) -> {str:{str:int}}:
    dt = {}
    for name in db1:
        for skill in db1[name]:
            if skill not in dt:
                dt[skill] = {}
    for name in db1:
        for skill in db1[name]:
            if skill in dt:
                dt[skill][name] = db1[name][skill]
    sorted_dt = {key: dt[key] for key in sorted(dt.keys())} # sort the dictionary by key
    return sorted_dt

見下文

from collections import defaultdict

db1 = {
        'Diane':   {'Laundry': 2,   'Cleaning': 4, 'Gardening': 3},
        'Betty':   {'Gardening': 2, 'Tutoring': 1, 'Cleaning': 3},
        'Charles': {'Plumbing': 2,  'Cleaning': 5},
        'Adam':    {'Cleaning': 4,  'Tutoring': 2, 'Baking': 1},
        }
d = defaultdict(dict)
for k,v in db1.items():
  for k1,v1 in v.items():
    d[k1][k] = v1
sorted_keys = sorted(list(d.keys()))
final = {k:d[k] for k in sorted(list(d.keys()))}
print(final)

輸出

{'Baking': {'Adam': 1}, 'Cleaning': {'Diane': 4, 'Betty': 3, 'Charles': 5, 'Adam': 4}, 'Gardening': {'Diane': 3, 'Betty': 2}, 'Laundry': {'Diane': 2}, 'Plumbing': {'Charles': 2}, 'Tutoring': {'Betty': 1, 'Adam': 2}}

暫無
暫無

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

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