按值和键对字典内容进行排序

时间:2011-08-16 09:27:29

标签: python sorting dictionary

已经完全描述了用该值对dictonary的内容进行排序,因此可以通过以下方式实现:

d={'d':1,'b':2,'c':2,'a':3}
sorted_res_1= sorted(d.items(), key=lambda x: x[1]) 
# or
from operator import itemgetter 
sorted_res_2 = sorted(d.items(), key=itemgetter(1)) 

我的问题是,实现以下输出的最佳方法是什么:

[('d',1),('b',2),('c',2),('a',3)]而不是[('d',1),('c ',2),('b',2),('a',3)]

以便元组按值排序,然后按键排序,如果值相等。

其次 - 反转是否可行: [('a',3),('b',2),('c',2),('d',1)]而不是[('a',3),('c',2 ),('b',2),('d',1)]?

3 个答案:

答案 0 :(得分:4)

sorted key参数可以返回元组。在这种情况下,元组中的第一项用于对项目进行排序,第二项用于打破关系,第三项用于仍然绑定,依此类推......

In [1]: import operator

In [2]: d={'d':1,'b':2,'c':2,'a':3}

In [3]: sorted(d.items(),key=operator.itemgetter(1,0))
Out[3]: [('d', 1), ('b', 2), ('c', 2), ('a', 3)]

operator.itemgetter(1,0)返回由第二个组成的元组,然后是第一个项。也就是说,如果f=operator.itemgetter(1,0),则f(x)会返回(x[1],x[0])

答案 1 :(得分:2)

您只需要标准tuple比较,但在反向模式下:

>>> sorted(d.items(), key=lambda x: x[::-1])
[('d', 1), ('b', 2), ('c', 2), ('a', 3)]

答案 2 :(得分:0)

另一种方法,非常接近您自己的例子:

sorted(d.items(), key=lambda x: (x[1], x[0]))