前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python dict的list排序

python dict的list排序

作者头像
py3study
发布2020-01-14 11:12:58
1.8K0
发布2020-01-14 11:12:58
举报
文章被收录于专栏:python3

对于简单的list排序,直接调用内建函数就可以了,但是对于dict的list排序就没有那么直接了,不过,还是有很简洁的办法的,如:

>>> ls1 = [{'a' : 1, 'b' : 12}, {'a' : -1, 'b' : 22},{'a' : 12, 'b' : 32},{'a' : 6, 'b' : 42}]

>>> ls1.sort(key=lambda obj:obj.get('a'))

>>> ls1[{'a': -1, 'b': 22}, {'a': 1, 'b': 12}, {'a': 6, 'b': 42}, {'a': 12, 'b': 32}]

>>>

python中dict和list排序 1、list排序    列表的排序是python内置功能,自身含有sort方法    如:    >>> s=[2,1,3,0]    >>> s.sort()    [0, 1, 2, 3] 2、dict排序    对字典的排序,因为每一个项包括一个键值对,所以要选择可比较的键或值进行排序     sorted(iterable[, cmp[, key[, reverse]]]     cmp和key一般使用lambda 如: >>> d={"ok":1,"no":2} 对字典按键排序,用元组列表的形式返回 >>> sorted(d.items, key=lambda d:d[0]) [('no', 2), ('ok', 1)] 对字典按值排序,用元组列表的形式返回 >>> sorted(d.items, key=lambda d:d[1]) [('ok', 1), ('no', 2)] 3、元组列表排序    如 >>> li=[(2,'a'),(4,'b'),(1,'d')] >>> li.sort() [(1, 'd'), (2, 'a'), (4, 'b')] 如果字典按项的第一个元素排序的话,可以转换成元组列表来进行 >>> d={"ok":1,"no":2} >>> tt=[tuple(item) for item in d.items()] >>> tt.sort() [('no', 2), ('ok', 1)] 4 其他人的实现,留住备忘 下面是一个结构的例子 >>> class test:         def __init__(self,a,b):               self.a = a               self.b = b>>> test1 = test(5,25) >>> test2 = test(10,15) >>> tests = [test1,test2]>>> sorted(tests,cmp = lambda x,y: cmp(x.a, y.a)) 

>>> result = sorted(tests,key = lambda d:d.a) 5、

# (IMHO) the simplest approach: def sortedDictValues1(adict): items = adict.items() items.sort() return [value for key, value in items] # an alternative implementation, which # happens to run a bit faster for large # dictionaries on my machine: def sortedDictValues2(adict): keys = adict.keys()   keys.sort() return [dict[key] for key in keys] # a further slight speed-up on my box # is to map a bound-method: def sortedDictValues3(adict): keys = adict.keys() keys.sort()

return map(adict.get, keys)

以下是sort的具体实例。实例1: >>>L = [2,3,1,4] >>>L.sort() >>>L >>>[1,2,3,4] 实例2: >>>L = [2,3,1,4] >>>L.sort(reverse=True) >>>L >>>[4,3,2,1] 实例3: >>>L = [('b',2),('a',1),('c',3),('d',4)] >>>L.sort(cmp=lambda x,y:cmp(x[1],y[1])) >>>L >>>[('a', 1), ('b', 2), ('c', 3), ('d', 4)] 实例4: >>>L = [('b',2),('a',1),('c',3),('d',4)] >>>L.sort(key=lambda x:x[1]) >>>L >>>[('a', 1), ('b', 2), ('c', 3), ('d', 4)] 实例5: >>>L = [('b',2),('a',1),('c',3),('d',4)] >>>import operator >>>L.sort(key=operator.itemgetter(1)) >>>L >>>[('a', 1), ('b', 2), ('c', 3), ('d', 4)] 实例6:(DSU方法:Decorate-Sort-Undercorate) >>>L = [('b',2),('a',1),('c',3),('d',4)] >>>A = [(x[1],i,x) for i,x in enumerate(L)] #i can confirm the stable sort >>>A.sort() >>>L = [s[2] for s in A] >>>L >>>[('a', 1), ('b', 2), ('c', 3), ('d', 4)] 以上给出了6中对List排序的方法,其中实例3.4.5.6能起到对以List item中的某一项 为比较关键字进行排序. 效率比较: cmp < DSU < key 通过实验比较,方法3比方法6要慢,方法6比方法4要慢,方法4和方法5基本相当 多关键字比较排序: 实例7: >>>L = [('d',2),('a',4),('b',3),('c',2)] >>> L.sort(key=lambda x:x[1]) >>> L >>>[('d', 2), ('c', 2), ('b', 3), ('a', 4)] 我们看到,此时排序过的L是仅仅按照第二个关键字来排的,如果我们想用第二个关键字 排过序后再用第一个关键字进行排序呢?有两种方法 实例8: >>> L = [('d',2),('a',4),('b',3),('c',2)] >>> L.sort(key=lambda x:(x[1],x[0])) >>> L >>>[('c', 2), ('d', 2), ('b', 3), ('a', 4)] 实例9: >>> L = [('d',2),('a',4),('b',3),('c',2)] >>> L.sort(key=operator.itemgetter(1,0)) >>> L >>>[('c', 2), ('d', 2), ('b', 3), ('a', 4)] 为什么实例8能够工作呢?原因在于tuple是的比较从左到右之一比较的,比较完第一个,如果 相等,比较第二个

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/07/13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档