[00013] 通过某个关键字,排序一个字典列表
通过某个关键字,排序一个字典列表一、 解决问题根据某个或某几个字典字段来排序字典列表。二、解决方案模块: operator函数:itemgetter三、代码说明#!/usr/bin/env/python#cofing=utf-8"""operator.itemgetter(item)operator.itemgetter(*items)这个函数会调用所传入
·
通过某个关键字,排序一个字典列表
一、 解决问题
根据某个或某几个字典字段来排序字典列表。
二、解决方案
模块: 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函数
五、总结
当标准库需要使用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
更多推荐
已为社区贡献4条内容
所有评论(0)