如何使用lambda函数按嵌套列表的第二个元素排序字典?
问题分析
你当前代码的问题在于:直接对字典调用sorted()时,默认迭代的是字典的键,而非键值对。lambda里的x是字典的键(比如"third"),x[1][-1]实际是取字符串的第二个字符再取最后一位,完全偏离了你要获取嵌套列表第二个元素的目标。
正确写法
要按嵌套列表的第二个元素从大到小排序,需要:
- 迭代字典的键值对(用
testing.items()) - 在lambda中指定排序依据为值列表的第二个元素(索引
1或-1都可以,因为列表只有两个元素) - 添加
reverse=True实现降序排序
完整示例(获取排序后的键值对列表)
testing = {"third":[1,89],"first":[5,46],"second":[3,59]} sorted_result = sorted(testing.items(), key=lambda x: x[1][1], reverse=True) print(sorted_result)
输出:
[('third', [1, 89]), ('second', [3, 59]), ('first', [5, 46])]
仅获取排序后的键列表
如果只需要排序后的键,可对结果做简单推导:
sorted_keys = [item[0] for item in sorted(testing.items(), key=lambda x: x[1][1], reverse=True)] print(sorted_keys)
输出:
['third', 'second', 'first']
内容的提问来源于stack exchange,提问作者agni_ka1
相关产品推荐
相关产品推荐

