persons= [{'name': 'Jon', 'age': 32}, {'name': 'Alan', 'age': 50}, {'name':'Bob', 'age':23}]
sorted(persons, key = lambda x: (x['name'], -x['age']))
persons
[{'age': 32, 'name': 'Jon'},
{'age': 50, 'name': 'Alan'},
{'age': 23, 'name': 'Bob'}]
输出结果:
[{'age': 50, 'name': 'Alan'},
{'age': 23, 'name': 'Bob'},
{'age': 32, 'name': 'Jon'}]
这是一个关于sorted函数的讲解,我知道这里key是接收一个函数,但是里面的x和-x我无法理解是怎么做到排序的,还希望前辈可以指点一二,先行谢过。
排序是基于比较进行的。所以
name
的比较是正比较,也就是较小的名字=较小的对象=排在更前面,较大的名字=较大的对象=排在更后面
,这比较下来就可以根据名字排好序了。第二个
-age
意思是在名字相同的对象(例如好几个人的名字都叫John)之间,采用年龄的负比较,也就是年龄大的反而被认为是小(排在更前面),年龄小的反而被认为是大(排在更后面)。