Reputation: 83
I have a python dictionary with the following format.
{'range_qty':
{'0 to 10 qty': 5,
'more than 5000 qty': 18,
'500 to 1000 qty': 20,
'200 to 500 qty': 19,
'1000 to 5000 qty': 15,
'10 to 50 qty': 3,
'50 to 200 qty': 14}}
How can I sort this dictionary by the key ? I need output like
{'range_qty':
{'0 to 10 qty': 5,
'10 to 50 qty': 3,
'50 to 200 qty': 14,
'200 to 500 qty': 19,
'500 to 1000 qty': 20,
'1000 to 5000 qty': 15,
'more than 5000 qty': 18,
}}
Upvotes: 0
Views: 70
Reputation: 11992
Depending on your python version your dict by default might not store order. However if you wanted to iterate over this dict in the order you listed you can use sort if you make your keys uniform. I.E make them all start with an int. So instead of more than 5000 qty
you could change it to 5000 or more qty
data = {'range_qty':
{'0 to 10 qty': 5,
'5000 or more qty': 18,
'500 to 1000 qty': 20,
'200 to 500 qty': 19,
'1000 to 5000 qty': 15,
'10 to 50 qty': 3,
'50 to 200 qty': 14}}
for qty in sorted(data['range_qty'], key=lambda text: int(text.split()[0])):
print(f"{qty}: {data['range_qty'][qty]}")
OUTPUT
0 to 10 qty: 5
10 to 50 qty: 3
50 to 200 qty: 14
200 to 500 qty: 19
500 to 1000 qty: 20
1000 to 5000 qty: 15
5000 or more qty: 18
Upvotes: 0
Reputation: 82765
Using a custom sort.
Ex:
import sys
def cust_sort(val):
i = val[0].split(" ", 1)[0]
if not i.isdigit():
return sys.maxsize
return int(i)
data = {'range_qty':
{'0 to 10 qty': 5,
'more than 5000 qty': 18,
'500 to 1000 qty': 20,
'200 to 500 qty': 19,
'1000 to 5000 qty': 15,
'10 to 50 qty': 3,
'50 to 200 qty': 14}}
data = sorted(data['range_qty'].items(), key=cust_sort)
#or data = {'range_qty': dict(sorted(data['range_qty'].items(), key=cust_sort))}
print(data)
Output:
[('0 to 10 qty', 5),
('10 to 50 qty', 3),
('50 to 200 qty', 14),
('200 to 500 qty', 19),
('500 to 1000 qty', 20),
('1000 to 5000 qty', 15),
('more than 5000 qty', 18)]
Upvotes: 1