按值排序字典,然后按键排序

2024-04-29 16:50:00 发布

您现在位置:Python中文网/ 问答频道 /正文

嘿,我正在尝试按值对字典进行排序,从最高值到最低值。但是,我希望具有相同值的项按键排序

以下代码不起作用

dictionary = {"Sophie": 23, "Alfred": 23, "Zelda":22, "Betty":23}
sorted(dictionary.items(), key=lambda t: t[::-1])

输出:

[('Zelda', 22), ('Alfred', 23), ('Betty', 23), ('Sophie', 23)]

预期产出:

[('Alfred', 23), ('Betty', 23), ('Sophie', 23), ('Zelda', 22)]

按递减值排序,然后按键排序(按字母顺序)


Tags: lambdakey代码dictionary字典排序字母items
2条回答

选择1

这是一个更现代的解决方案,它只在python3.x中起作用,这与问题所采用的方法相同。您需要使用t: (-t[1], t[0])而不是t[::-1]作为索引。-t[1]按升序对名称排序,因为它已被忽略t[0]按降序对键进行排序。 代码如下:

dictionary = {"Sophie": 23, "Alfred": 23, "Zelda":22, "Betty":23}
reversed_dict= dict(sorted(dictionary.items(), key=lambda t: (-t[1], t[0])))
print(reversed_dict)

输出:

{'Alfred': 23, 'Betty': 23, 'Sophie': 23, 'Zelda': 22}

选择2

这是一个更具可移植性的解决方案,适用于所有版本的python。 sorted(dictionary.items(), key=operator.itemgetter(0))按升序排列名称,然后sorted(reversed_dict, key=operator.itemgetter(1), reverse=True))按降序排列键

代码如下:

import operator

dictionary = {"Sophie": 23, "Alfred": 23, "Zelda":22, "Betty":23}
reversed_dict = sorted(dictionary.items(), key=operator.itemgetter(0))
reversed_dict = dict(sorted(reversed_dict, key=operator.itemgetter(1), reverse=True))
print(reversed_dict)

输出:

{'Alfred': 23, 'Betty': 23, 'Sophie': 23, 'Zelda': 22}

由于您希望使用一个键(值)按降序排序,另一个键(名称)按升序排序,因此简单地颠倒排序顺序是行不通的。相反,您应该构造一个值和名称的元组,并将值取反以按降序排序:

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

相关问题 更多 >