下面是我的字典样本。在
my_dict = {
'003':{
'class':'13',
'marks':'90',
'name':'CCC',
'date_accessed':'2017-07-12 17:43:24'
},
'002':{
'marks':'90',
'class':'10',
'name':'BBB',
'date_accessed':'2017-07-12 17:43:24'
},
'001':{
'marks':'80',
'class':'9',
'name':'AAA',
'date_accessed':'2017-07-12 17:43:24'
},
'005':{
'date_accessed':'2017-07-12 17:43:42',
'marks':'999',
'name':'EEE',
'class':'99'
},
'004':{
'class':'50',
'marks':'100',
'name':'DDD',
'date_accessed':'2017-07-12 17:43:24'
}
}
现在我想按marks
对其进行排序,因此生成的字典将如下所示
现在,不知怎么的,我已经实现了用这个等式对它进行排序marks
dict_sorted = sorted(my_dict, key=lambda x: int(my_dict[x]['marks']), reverse=True)
但是这只给了我一个排序的keys
,但是我不能像上面那样生成新排序的字典。请在此帮助我按marks
对字典进行排序,并给出新的分类字典。谢谢。在
编辑:我已经在stackoverflow中看到过很多帖子,比如这个Sort a Python dictionary by value和这个Issue sorting a multi-dimensional dictionary that has non-numeric indices in Python,但是这些帖子不能提供我需要的结果。在
用你必须的那一行得到你想要字典的正确索引顺序
然后使用新的索引顺序遍历字典,并添加到新字典中
^{pr2}$据我所知,在python中,你不能真正地对字典进行排序,我将使用以下代码:
然后:
^{pr2}$字典是无序的直到(包括)python-3.5。只有少数版本的python-3.6字典才被订购。如documentation中所写:
所以我们最好是安全的,而不是抱歉,不要使用
dict
。在在
collections
中有一个OrderedDict
类,它是一个字典,它按照元素添加的方式维护元素的顺序。在因此,我们现在可以这样使用它:
请注意,您必须使用
.items()
来获得具有键值对的元组。然后,我们通过获取值(元组的第二个元素)对元素进行排序,并从该值中获取与'marks'
键关联的值。在如果你想进行数值比较,你应该先添加一个
int(..)
调用,把它们转换成整数。在这将产生:
^{pr2}$OrderedDict
是Python中的香草字典的子类。因此,dict
支持的所有操作也受OrderedDict
的支持。在相关问题 更多 >
编程相关推荐