python里students.sort(key=lambda x: x['name']),两个x的意思是啥?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python里students.sort(key=lambda x: x['name']),两个x的意思是啥?相关的知识,希望对你有一定的参考价值。

也就是说我不太明白这两个x到底是不是一回事,能不能解释一下这个lambda x: x['name']的意思
一下是一段代码
students = [
'name': 'A', 'age': '20',
'name': 'B', 'age': '19',
'name': 'C', 'age': '22'
]
students.sort(key=lambda x: x['name'])

lambda x:x ['name']是一个匿名函数(俗称lambda表达式),冒号前面的x是函数的参数,sort函数会把列表的每个字典传给x,而x['name']是函数的函数体,意思是返回字典x的name键的值。

这个代码的意思就是按列表中每个字典的name键的升序来对列表排序。

其实,students.sort(key=lambda x:x['name'])就是相当于这样:
#先定义一个函数
def k(x):return x['name']
#key按关键字传参排序
students.sort(key=k)追问

我就等这样的答案,给我看看def之后的代码我就知道怎么回事了,其实我昨天也理解到意思了,就是一直纠结两个X之间的关系而已

参考技术A 具体可以查询关于匿名函数的使用,第一个x只是一个相当于形式的一个,这是一种匿名函数的命名方式,后面的x指的就是输入进来的字典,对其中的key进行,也就是name进行排序 参考技术B 这两个x都是列表,在lambda表达式中,求按照name生序排列的列表 参考技术C 按name进行排序,x起传递的作用

python性能:不要使用 key in list 判断key是否在list里

原文:https://docs.quantifiedcode.com/python-anti-patterns/performance/using_key_in_list_to_check_if_key_is_contained_in_a_list.html

  使用 key in list 去迭代list会潜在的花费n次迭代才能完成,n为该key在list中位置。允许的话,可以将list转成set或者dict, 因为Python在set或dict中查找元素是通过直接访问他们而不需要迭代,这会高效很多。

反模式

  下面的代码定义了一个list类型l,然后调用 if 3 in l去检查3是否在l中。这是低效的。这后面其实是Python一直迭代list,直到找到3或者遍历完list。  

l = [1, 2, 3, 4]

# iterates over three elements in the list
if 3 in l:
    print("The number 3 is in the list.")
else:
    print("The number 3 is NOT in the list.")

推荐做法

  使用set或dict代替list

  改良的代码如下,list转成set。更高效的背后是因为Python中,set尝试直接去访问目标值而不是通过迭代list中的每个元素和目标值相比较。

s = set([1, 2, 3, 4])

if 3 in s:
    print("The number 3 is in the list.")
else:
    print("The number 3 is NOT in the list.")

 

以上是关于python里students.sort(key=lambda x: x['name']),两个x的意思是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Python 基于字典里的指定key进行排序

python里出现keyerror 怎么解决

python里字典的用法介绍

python字典中,有个文本, 两列值 1对多关系,请问怎么把key和value都放在字典里呢?

Python(54)_大于66的分组存放在字典里

python里 key=lambda d:d[0]是啥意思?谢谢