上QQ阅读APP看书,第一时间看更新
2.3.7 使用函数itemgetter()对字典进行排序
在Python程序中,如果存在一个字典列表,如何根据一个或多个字典中的值来对列表进行排序呢?建议使用operator模块中的内置函数itemgetter()。函数itemgetter()的功能是获取对象中指定域的值,参数为一些序号(即需要获取的数据在对象中的序号)。以下实例文件wei.py的功能是获取对象中指定域的值。
源码路径:daima\第2章\wei.py
from operator import itemgetter a = [1,2,3] b=itemgetter(1) #定义函数b,获取对象的第1个域的值 print(b(a)) b=itemgetter(1,0) #定义函数b,获取对象的第1个域和第0个域的值 print(b(a))
函数itemgetter()获取的不是值,而是定义一个函数,通过把该函数作用到对象上才能获取值。执行后输出:
2 (2, 1)
下面的实例文件pai.py使用函数itemgetter()排序字典中的值。
源码路径:daima\第2章\pai.py
from operator import itemgetter ①rows = [ {'fname': 'AAA', 'lname': 'ZHANG', 'uid': 1001}, {'fname': 'BBB', 'lname': 'ZHOU', 'uid': 1002}, {'fname': 'CCC', 'lname': 'WU', 'uid': 1004}, {'fname': 'DDD', 'lname': 'LI', 'uid': 1003} ] ②rows_by_fname = sorted(rows, key=itemgetter('fname')) rows_by_uid = sorted(rows, key=itemgetter('uid')) print(rows_by_fname) ③print(rows_by_uid) ④rows_by_lfname = sorted(rows, key=itemgetter('lname', 'fname')) print(rows_by_lfname) ⑤rows_by_fname = sorted(rows, key=lambda r: r['fname']) ⑥rows_by_lfname = sorted(rows, key=lambda r: (r['fname'], r['lname'])) print(rows_by_fname) print(rows_by_lfname) ⑦print(min(rows, key=itemgetter('uid'))) ⑧print(max(rows, key=itemgetter('uid')))
· 在①中,定义一个保存用户信息的字典rows。
· 在②~③中,根据所有字典中共有的字段来对rows中的记录进行排序。
· 在④中,itemgetter()函数接收多个键。
· 在⑤~⑥中,使用lambda表达式代替itemgetter()函数的功能。在此提醒读者,少用lambda表达式,使用itemgetter()函数会运行得更快一些。如果需要考虑程序的性能问题,建议使用itemgetter()函数。
· 在⑦~⑧中,函数itemgetter()同样可以用于操作min()和max()函数。
执行后会输出:
[{'fname': 'AAA', 'lname': 'ZHANG', 'uid': 1001}, {'fname': 'BBB', 'lname': 'ZHOU', 'uid': 1002}, {'fname': 'CCC', 'lname': 'WU', 'uid': 1004}, {'fname': 'DDD', 'lname': 'LI', 'uid': 1003}] [{'fname': 'AAA', 'lname': 'ZHANG', 'uid': 1001}, {'fname': 'BBB', 'lname': 'ZHOU', 'uid': 1002}, {'fname': 'DDD', 'lname': 'LI', 'uid': 1003}, {'fname': 'CCC', 'lname': 'WU', 'uid': 1004}] [{'fname': 'DDD', 'lname': 'LI', 'uid': 1003}, {'fname': 'CCC', 'lname': 'WU', 'uid': 1004}, {'fname': 'AAA', 'lname': 'ZHANG', 'uid': 1001}, {'fname': 'BBB', 'lname': 'ZHOU', 'uid': 1002}] [{'fname': 'AAA', 'lname': 'ZHANG', 'uid': 1001}, {'fname': 'BBB', 'lname': 'ZHOU', 'uid': 1002}, {'fname': 'CCC', 'lname': 'WU', 'uid': 1004}, {'fname': 'DDD', 'lname': 'LI', 'uid': 1003}] [{'fname': 'AAA', 'lname': 'ZHANG', 'uid': 1001}, {'fname': 'BBB', 'lname': 'ZHOU', 'uid': 1002}, {'fname': 'CCC', 'lname': 'WU', 'uid': 1004}, {'fname': 'DDD', 'lname': 'LI', 'uid': 1003}] {'fname': 'AAA', 'lname': 'ZHANG', 'uid': 1001} {'fname': 'CCC', 'lname': 'WU', 'uid': 1004}