python sort函数key_理解sort()函数中的key「终于解决」

python sort函数key_理解sort()函数中的key「终于解决」最近在看effective-python,第二章函数中提到了优先排序的概念,具体代码如下:values=[1,5,3,9,7,4,2,8,6]group=[7,9]defsort_priority(values,group):defhelper(x):ifxingroup:return(0,x)return(1,x)values.sort(key=he…

大家好,欢迎来到IT知识分享网。

最近在看effective-python,第二章函数中提到了优先排序的概念,具体代码如下:

values = [1, 5, 3, 9, 7, 4, 2, 8, 6]

group = [7, 9]

def sort_priority(values, group):

def helper(x):

if x in group:

return (0, x)

return (1, x)

values.sort(key=helper)

sort_priority(values, group)

print(values)

[7, 9, 1, 2, 3, 4, 5, 6, 8]

这代码的目的是group优先于values排序(前提就是values包含group),使用了闭包和sort()函数,很熟悉,正好复习一下。

sort(key=None, reverse=False)

sort()有两个参数,一个是reverse,这个非常简单,就是字面意思,如果设为True则反向排序(godv:???)。另一个就是今天重点要说的,key,通常在字典的排序中可以见到这个参数(一般字典排序用sorted()):

dict = {‘b’: 1, ‘r’: 7, ‘z’: 2}

content = list(dict.items()) # 先转换为列表包含元祖的形式

打印如下:

[(‘b’, 1), (‘z’, 2), (‘r’, 7)]

content.sort(key=lambda x:x[0]) # 这里的0就是元祖的第一个元素,也就是按键排序。按值就是把0改成1

打印如下:

[(‘b’, 1), (‘c’, 7), (‘z’, 2)]

原理:在排序之前,content里的所有元素都会执行key的函数,这里指的就是lambda函数,计算出值之后,赋值给key(相当于{‘b’: (‘b’, 1)}),然后sort()是针对key进行排序,然后再根据这个key对应的值替换到排好序的content里。

看到这里,优先排序的代码就非常清晰了:

helper()函数判断value中哪些元素在group中,并把其设置为以0为第一个元素的元祖,而不在group的元素则设置为以1为第一个元素的元祖,所以在sort()函数排序时,位置靠前的当然时以0开头的元祖(键相同则按值排序),于是便完成了优先排序。

以上!

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/25845.html

(0)
上一篇 2023-07-06 17:00
下一篇 2023-07-08 15:00

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信