I have this dictionary:
statuses = {
'pending' : {'status_for':'all', 'position':1},
'cancelled' : {'status_for':'all','position':2},
'approved' : {'status_for':'owner', 'position':1},
'rejected - owner' : {'status_for':'owner', 'position':2},
'accepted' : {'status_for':'dev', 'position':1},
'rejected - developer' : {'status_for':'dev', 'position':3},
'closed' : {'status_for':'dev', 'position':5},
}
I’ve also got a function to pull all status_for values of either owner or dev that looks like this and put it into a PyQt QComboBox:
for s in statuses:
if statuses[s]['status_for'] == "dev" or statuses[s]['status_for'] == "all":
cb_developer_status.addItem(s.capitalize(), s)
I’d like to order these by the position value though. What is a good way to do this, so that when I populate by combobox I have it in a predefined order?
I realize that the snippet above is checking for both ‘dev’ and ‘all’, my assumption right now is that I’d have to loop through the dictionary twice to get the two separate blocks in the order I wish (ie. ‘all’ appears before ‘dev’).
I saw this post, but I’m not sure how to convert this answer to something that
is a dictionary of dictionaries.
Would something like this work? Similar to the post you linked, this uses the
keyfunction ofsortedto provide a custom sort order.iteritems()returns a(key, value)tuple, so that gets passed intolambda (x, y): y['position'], wherey['position']is the value (your nested dictionary, keyed by the status), andpositionis the item by which you want to sort.