Python中sorted传入hashmap.get作key参数为何不报错?
问题解答
你的代码逻辑没问题,核心在于理解sorted函数的key参数和字典迭代的特性,拆解如下:
字典的默认迭代行为:
当你直接把hashmap传给sorted时,默认遍历的是字典的键,等价于写sorted(hashmap.keys()),所以排序的原始元素是1、2、3这三个键。key参数的作用:key需要接收一个函数对象,而不是函数调用的结果。你传的hashmap.get就是这个函数对象——它是字典的内置方法,作用是根据键取值。
在排序过程中,sorted会自动把每个遍历到的键(比如第一个键1)作为参数传给hashmap.get,也就是执行hashmap.get(1)得到值2,用这个值作为该键的排序依据。对所有键执行这个操作后,就会根据对应的值降序排列键。
简单说,这段代码等价于:
hashmap = {1: 2, 2: 3, 3: 1} ans = [] # 手动模拟key的作用:给每个键绑定对应的值 sorted_items = sorted(hashmap.items(), key=lambda x: x[1], reverse=True) for k, v in sorted_items: ans.append(k)
你之前的误解是把hashmap.get当成了直接调用,但实际上这里只是把方法本身传给key,由sorted帮你完成每个键的传参调用。
内容的提问来源于stack exchange,提问作者Silas Maughan
相关产品推荐
相关产品推荐

