[00013] 通过某个关键字,排序一个字典列表

来源:互联网 发布:网络数据分析工具解析 编辑:程序博客网 时间:2024/06/02 04:06

通过某个关键字,排序一个字典列表

一、 解决问题

根据某个或某几个字典字段来排序字典列表。

二、解决方案

模块: operator
函数: itemgetter

三、代码说明

#!/usr/bin/env/python#cofing=utf-8"""operator.itemgetter(item)operator.itemgetter(*items)    这个函数会调用所传入的操作数的__getitem__()方法返回一个带有item的可调用对象operator.attrgetter(attr)operator.attrgetter(*attrs)    返回一个带有操作数中的attr属性的可调用对象"""from operator import itemgetter, attrgetter#待排序数据rows = [    {'fname': 'Brian', 'lname': 'Jones', 'uid': 1003},    {'fname': 'David', 'lname': 'Beazley', 'uid': 1002},    {'fname': 'John', 'lname': 'Cleese', 'uid': 1001},    {'fname': 'Big', 'lname': 'Jones', 'uid': 1004}]rows_by_name = sorted(rows, key=itemgetter('fname'))print (rows_by_name)"""[{'uid': 1004, 'fname': 'Big', 'lname': 'Jones'}, {'uid': 1003, 'fname': 'Brian', 'lname': 'Jones'}, {'uid': 1002, 'fname': 'David', 'lname': 'Beazley'}, {'uid': 1001, 'fname': 'John', 'lname': 'Cleese'}]"""rows_by_uid = sorted(rows, key=itemgetter('uid'))print (rows_by_uid)"""[{'lname': 'Cleese', 'fname': 'John', 'uid': 1001}, {'lname': 'Beazley', 'fname': 'David', 'uid': 1002}, {'lname': 'Jones', 'fname': 'Brian', 'uid': 1003}, {'lname': 'Jones', 'fname': 'Big', 'uid': 1004}]"""# 支持多个rows_by_lfname = sorted(rows, key=itemgetter('lname','fname'))print(rows_by_lfname)"""[{'uid': 1002, 'lname': 'Beazley', 'fname': 'David'}, {'uid': 1001, 'lname': 'Cleese', 'fname': 'John'}, {'uid': 1004, 'lname': 'Jones', 'fname': 'Big'}, {'uid': 1003, 'lname': 'Jones', 'fname': 'Brian'}]"""

使用lambda函数进行替代

# 使用lambda 表达式替代rows_by_fname = sorted(rows, key=lambda r: r['fname'])rows_by_lfname = sorted(rows, key= lambda r: (r['lname'], r['fname']))

四、关联知识

参照blog: python中sort和sorted函数

五、总结

  1. 当标准库需要使用key做参数时,可以考虑参入operator.itemgetter(),operator.attrgetter()方法来进行传入一个可调用对象。

    • min(),max() ->key参数,就是比较时的规则。

六、代码地址

github地址:https://github.com/weichen666/python_cookbook
目录/文件:first_selection/learn_operation_itemgetter

七、参考

python中sort和sorted函数:http://blog.csdn.net/qq_29883591/article/details/51615499

0 0
原创粉丝点击