学python第三天遇到逻辑没法理顺的一个小问题

img


把56行那个字典的数据项打印出来之后,能看到是个元组,后面排序时切片的d:d【0】不应该是(q,11)这个整体,为啥他把key当作【0】,把value当作【1】

作者这个问题我觉得提的很好,对于新手来说,基本都存在这个问题。这里核心需要理解的是lambda定义的匿名函数,以及sorted这个函数。
sorted函数可以参考:

lambda匿名函数可以参考:

回到作者的代码,key = lambda d: d[0],指定了sorted排序时具体使用到的key:对于可迭代对象的每一个元素d,使用其d[0]作为排序的key,就相当于excel表格使用哪一列来进行排序一样。

例如,下面代码,就是对L进行排序,指定排序使用的是L的每一个元素的value:

 L=[('b',2),('a',1),('c',3),('d',4)]
LS = sorted(L, key=lambda x:x[1])
print(LS)

此外,作者还需要知道,对于元组d,是可以使用类似于列表的方式访问的,例如,元组d=("a", 1),d[0]就表示下标为0的元素,d[1]就表示下标为1的元素。

觉得有帮助记得采纳本答案,也可以关注我的专栏Python编程,最近基本保持每天一更。

a.items() 就相当于一个大容器中装了许多的(k,v)元素,所以sorted时,lambda 的d传的就是(k,v)元组,那么想对key排序就是d[0],想对value排序就是d[1]

a.items() 返回的是一个dict_item对象,其实返回的是list(你可以alt点进去看里面的代码),list中每个元素是一个元组,sorted函数的key参数传递的是一个lambda匿名函数,这时你要有函数式编程的思维,d代表的是返回的list的元素,也就是(k,v)元组,这你是不是明白了d[0],d[1]的含义了吧