给定一个 Python 字典,请编写代码实现按键的值从大到小排序,并返回排序后的键列表。
考察说明
考查对Python字典排序的掌握,包括sorted、lambda及列表推导式的使用。
回答思路
- 【回答框架 1】使用内置sorted函数,传入字典的items视图作为可迭代对象,并用key参数指定排序依据为值,即lambda item: item[1],反转排序设置reverse=True。
- 【回答框架 2】示例:若字典为d = {'a':3, 'b':1, 'c':2},则sorted(d.items(), key=lambda x: x[1], reverse=True)得到[('a',3), ('c',2), ('b',1)],随后用列表推导取键得到['a','c','b']。
- 【回答框架 3】若追求简洁,可直接对字典本身排序,sorted(d, key=d.get, reverse=True),因为sorted迭代字典默认产生键,key=d.get按值排序。
- 【回答框架 4】复杂度方面,排序时间复杂度为O(n log n),空间复杂度为O(n),n为字典项数。
- 【回答框架 5】需注意sorted返回列表,不修改原字典;若需按值从小到大,仅需去掉reverse=True参数。
- 【关键点 1】sorted函数结合key参数指定排序依据为值的item[1]。
- 【关键点 2】reverse=True实现从大到小排序。
- 【关键点 3】返回的是键列表,可使用列表推导式提取键。
- 【关键点 4】sorted不改变原字典,新列表为排序结果。
- 【关键点 5】复杂度为O(n log n)。
- 【易错点 1】若字典值包含不可比较类型,需在key中处理,例如转换为字符串或使用数字。
- 【易错点 2】注意sorted返回的是由元组构成的列表,提取键时需正确解组或使用列表推导。
- 【易错点 3】不要直接使用dict的values排序,否则无法关联到键。