龙空技术网

Python学习教程实用技法:通过公共键对字典列表排序—itemgetter

千锋IT教育 138

前言:

此刻姐妹们对“python怎么对字典进行排序”大体比较讲究,同学们都想要剖析一些“python怎么对字典进行排序”的相关文章。那么小编也在网上搜集了一些有关“python怎么对字典进行排序””的相关知识,希望大家能喜欢,你们一起来学习一下吧!

Python学习教程实用技法:通过公共键对字典列表排序—itemgetter

前言:我们有一个字典列表,想根据一个或多个字典中的值对列表进行排序。

利用operator模块中的itemgetter函数对这类结构进行排序是非常简单的。

实例:

from operator import itemgetterrows=[{'name':'mark','age':18,'uid':'110'},{'name':'miaomiao','age':28,'uid':'150'},{'name':'miaomiao','age':8,'uid':'150'},{'name':'xiaohei','age':38,'uid':'130'},]rows_by_name=sorted(rows,key=itemgetter('name'))rows_by_uid=sorted(rows,key=itemgetter('uid'))print(rows_by_name)print(rows_by_uid)#itemgetter还支持多个键rows_by_name_age=sorted(rows,key=itemgetter('name','age'))print(rows_by_name_age)#itemgetter同样适用min、maxprint(min(rows,key=itemgetter('uid')))print(max(rows,key=itemgetter('age')))

运行结果:

[{'name': 'mark', 'age': 18, 'uid': '110'}, {'name': 'miaomiao', 'age': 28, 'uid': '150'}, {'name': 'miaomiao', 'age': 8, 'uid': '150'}, {'name': 'xiaohei', 'age': 38, 'uid': '130'}][{'name': 'mark', 'age': 18, 'uid': '110'}, {'name': 'xiaohei', 'age': 38, 'uid': '130'}, {'name': 'miaomiao', 'age': 28, 'uid': '150'}, {'name': 'miaomiao', 'age': 8, 'uid': '150'}][{'name': 'mark', 'age': 18, 'uid': '110'}, {'name': 'miaomiao', 'age': 8, 'uid': '150'}, {'name': 'miaomiao', 'age': 28, 'uid': '150'}, {'name': 'xiaohei', 'age': 38, 'uid': '130'}]{'name': 'mark', 'age': 18, 'uid': '110'}{'name': 'xiaohei', 'age': 38, 'uid': '130'}

讨论

在这个例子中,rows被传递给内建的sorted()函数,该函数接受一个关键字参数key,这个参数应该代表一个可调用对象(callable),该对象从rows中接受一个单独的元素作为输入并返回一个用来做排序依据的值。itemgetter()函数创建的就是这样的一个可调用对象。

函数operator.itemgetter()接受的参数可作为查询的标记,用来从rows的记录中提取出所需要的值。它可以是字典的键名称、用数字表示的列表元素或是任何可以传给对象的__getitem__()方法的值。如果传多个标记给itemgetter(),那么它产生的可调用对象将返回一个包含所有元素在内的元组,然后sorted()将根据对元组的排序结果来排列输出结果。如果想同时针对多个字段做排序,那么这是非常有用的。

有时候会用lambda表达式取代itemgetter()的功能,例如:

rows_by_uid=sorted(rows,key=lambda r:r['uid'])rows_by_name_age=sorted(rows,key=lambda r:(r['name','age']))

这种解决方案通常也能正常工作。但是用itemgetter()通常会运行的更快一些。因此如果需要考虑性能问题的话,应该使用itemgetter().

欢迎大家提出宝贵的意见,更多的Python学习教程也会继续为大家更新!

标签: #python怎么对字典进行排序 #python字典排序按值排序值相同按键排序 #python字典按照键排序 #python中列表可以作为字典的键么