我有这个字典:
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},
}
我还有一个函数来获取所有owner
或dev
的status_for
值,并将其放入PyQt QComboBox中,函数如下:
unique_status_for = sorted(set(status_for_list)) self.status_for_combobox.clear() for status_for in unique_status_for: self.status_for_combobox.addItem(status_for) ```
for s in statuses:
if statuses[s]['status_for'] == "dev" or statuses[s]['status_for'] == "all":
cb_developer_status.addItem(s.capitalize(), s)
我想按照 position
值来排序这些内容,有什么好的方法可以做到这一点,这样当我填充下拉框时就可以按照预定义的顺序呈现了?
我意识到上面的代码片段正在检查 'dev' 和 'all' 两者,我的假设是我需要通过字典循环两次来获取我希望的两个不同块(即'all'出现在'dev'之前)。
我看到了 这篇文章,但我不知道如何将这个答案转换为一个字典的字典。
key=lambda (k,v): v['position']
使代码更易于阅读+1。 - Jon Clementskey=lambda(k,v): v['position']
必须写成key=lambda k_v: k_v[1]['position']
。 - danodict.iteritems()
被改为dict.items()
:https://dev59.com/q10a5IYBdhLWcg3wW3nN - Jeppesorted(statuses.items(), key=lambda k_v: k_v[1]['position'])
。 - gies0r