您的位置:首页 > 编程语言 > Python开发

python列表字典排序

2017-08-01 00:00 417 查看
摘要: python列表字典排序

#!user/bin/python
# encoding:utf-8
from operator import itemgetter

# 方法一
csv1 = [{"name": "b", "num": 3}, {"name": "a", "num": 1}, {"name": "c", "num": 2}, {"name": "d", "num": 3}]

csv1.sort(key=itemgetter('num', 'name'), reverse=True)
print csv1

# 方法二
csv2 = [{"name": "b", "num": 3}, {"name": "a", "num": 1}, {"name": "c", "num": 2}, {"name": "d", "num": 3}, {"num": 3},
{"name": "a"}]

def sortKeyFun(x):
xList = ["num", "name"]
return tuple(x.get(ca) for ca in xList)

csv2.sort(key=sortKeyFun, reverse=True)
print csv2

# 方法三
csv3 = [{"name": "b", "num": 3}, {"name": "a", "num": 1}, {"name": "c", "num": 2}, {"name": "d", "num": 3}, {"num": 3},
{"name": "a"}]

def mysortedByKeyList(dictList, keyList):
dictList.sort(key=lambda x: tuple(x.get(ca) for ca in keyList), reverse=True)
return dictList

keyList = ["num", "name"]
print mysortedByKeyList(csv3, keyList)

备注:

方法三只是方法二的一个匿名函数方法,表达比较优雅而已。

方法一是最优雅的,用到

operator.itemgetter

但是是有缺陷的,例如:

# 方法一
csv1 = [{"name": "b", "num": 3}, {"name": "a", "num": 1}, {"name": "c", "num": 2}, {"name": "d", "num": 3}, {"num": 3},
{"name": "a"}]

csv1.sort(key=itemgetter('num', 'name'), reverse=True)
print csv1

当csv1某列字典里面的key不存在时,就会报错:

Traceback (most recent call last):
File "D:/python_learning/test/����������/atest1.py", line 9, in <module>
csv1.sort(key=itemgetter('num', 'name'), reverse=True)
KeyError: 'name'
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python sorted 多组排序