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

Python 按值和键对词典内容进行排序,python,sorting,dictionary,Python,Sorting,Dictionary,已经详细描述了按值对听写内容进行排序,因此可以通过以下方式实现: 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',

已经详细描述了按值对听写内容进行排序,因此可以通过以下方式实现:

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)]

排序的
参数可以返回元组。在这种情况下,元组中的第一项用于对项进行排序,第二项用于断开连接,第三项用于仍然连接的项,依此类推

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])
,您只需要标准
元组
比较,但在反向模式下:

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

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

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

注意:
itemgetter
与多个项一起只适用于python>2.5是否可以将一个项按直线排序,第二个项按相反顺序排序,即[('a',3],('b',2],('c',2],('d',1)]?@Damian:您可以通过将整数更改为负:
排序(d.items(),key=lambda x:(.x[1],x[0])