在Python中按值和键对字典进行排序?

4
我有如下字典:
dic = {'s': 3, 'a': 2, 'w': 2, 'y': 2, 'x': 2, 'm': 4, 'd': 5}

我需要首先按照“VALUE”排序元素,如果值重复,则按“KEY”排序,以获得以下输出结果:
dic = [('d', 5), ('m', 4), ('s', 3), ('a', 2), ('w', 2), ('x', 2), ('y', 2)]

我已经尝试使用以下代码:

我已经尝试使用以下代码:

sorted(dic.items(), key=lambda x: x[1], reverse=True)

但是我一直得到相同的输出(键等于2的字母没有按字母顺序排序):

[('d', 5), ('m', 4), ('s', 3), ('a', 2), ('w', 2), ('y', 2), ('x', 2)]

有人知道我怎么能解决这个问题吗?

提前感谢。

3个回答

5

您可以使用一个关键函数来对字典项进行排序,该函数返回一个2元组,第一个项目是字典项的相反数,第二个项目是键:

sorted(dic.items(), key=lambda t: (-t[1], t[0]))

这将返回:
[('d', 5), ('m', 4), ('s', 3), ('a', 2), ('w', 2), ('x', 2), ('y', 2)]

1
你已经接近成功了,需要在lambda排序中同时包含键和值:
sorted(dic.items(), key=lambda x: (-x[1],x[0]))

这个答案给出了一个反向字母顺序,因为 reverse=Truekey=lambda x: (-x[1],x[0]), reverse=False 可以解决这个问题,但如果 - 运算符未定义您的对象,则可能会引起其他问题。 - Nicolas Abril
谢谢,尼古拉斯。它正常工作了。你能解释一下这种情况下lambda函数的逻辑吗?我无法理解它。 - Caroline

0
请使用这个键的定义。
key=lambda x: (x[1],x[0])

此答案给出了字母的反向字母顺序。 - Caroline

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接