how can I sort a dictionary based on its 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
The result I get looks like this
{'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}}
However, I want this
{'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}}
whats the best way to do this by avoiding using OrderDict?
Python dictionaries are ordered by the order that the keys were added. You can create a new dictionary by sorting the key keys of the result.
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
See below
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)
output
{'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}}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.