Python dict按照value 排序
Python的内置dictionary数据类型是无序的,通过key来获取对应的value。可是有时我们需要对dictionary中的item进行排序输出,可能根据key,也可能根据value来排。到底有多少种方法可以实现对dictionary的内容进行排序输出呢?下面摘取了 一些精彩的解决办法。
#最简单的方法,这个是按照key值排序:
#!/usr/bin/env python # -*- coding:utf-8 -*- # # yanggang@mimvp.com # 2016-03-14 import sys reload(sys) sys.setdefaultencoding('utf-8') adict = { "a" : 1, "b" : 3, "d" : 5, "e" : 2, "c" : 4, } def sortedDictValues1(adict): items = adict.items() items.sort() result = [value for key, value in items] return result if __name__ == "__main__": print sortedDictValues1(adict)
运行结果(按照key排序后的value):
[1, 3, 4, 5, 2]
#又一个按照key值排序,貌似比上一个速度要快点
def sortedDictValues2(adict): keys = adict.keys() keys.sort() result = [adict[key] for key in keys] return result
运行结果(按照key排序后的value):
[1, 3, 4, 5, 2]
#还是按key值排序,据说更快。。。而且当key为tuple的时候照样适用
def sortedDictValues3(adict): keys = adict.keys() keys.sort() result = map(adict.get, keys) return result
运行结果(按照key排序后的value):
[1, 3, 4, 5, 2]
#一行语句搞定:
result = [adict[k] for k in sorted(adict.keys())]
运行结果(按照key排序后的value):
[1, 3, 4, 5, 2]
#来一个根据value排序的,先把item的key和value交换位置放入一个list中,再根据list每个元素的第一个值,即原来的value值,排序:
def sort_by_value(adict): items = adict.items() items2 = [[v[1], v[0]] for v in items] items2.sort() result = [ items2[i][1] for i in range(len(items2))] return result
运行结果(按照value排序后的key):
['a', 'e', 'b', 'c', 'd']
#用lambda表达式来排序,更灵活:
result = sorted(adict.items(), lambda x,y:cmp(x[1],y[1]))
运行结果:
[('a', 1), ('e', 2), ('b', 3), ('c', 4), ('d', 5)]
或反序:
result = sorted(adict.items(), lambda x,y:cmp(x[1],y[1]), reverse=True)
运行结果:
[('d', 5), ('c', 4), ('b', 3), ('e', 2), ('a', 1)]
# 按照key进行排序
result = sorted(adict.items(), key=lambda d:d[0])
运行结果:
[('a', 1), ('b', 3), ('c', 4), ('d', 5), ('e', 2)]
# 按照value进行排序
result = sorted(adict.items(), key=lambda d:d[1])
运行结果:
[('a', 1), ('e', 2), ('b', 3), ('c', 4), ('d', 5)]
python内置
sorted
函数的帮助文档:
sorted
(...)
sorted
(iterable,
cmp
=
None
, key
=
None
, reverse
=
False
)
-
-
> new
sorted
list
看了上面这么多种对dictionary排序的方法,其实它们的核心思想都一样,即把dictionary中的元素分离出来放到一个
list
中,对
list
排序,从而间接实现对dictionary的排序。这个“元素”可以是key,value或者item。
value排序可以用
l
=
sorted
(d.items(), key
=
lambda
d:d[
1
])
若版本低不支持
sorted
将key,value 以
tuple
一起放在一个
list
中
l
=
[]
l.append((akey,avalue))...
用sort()
l.sort(
lambda
a,b :
cmp
(a[
1
],b[
1
]))(
cmp
前加“
-
”表示降序排序)
版权所有: 本文系米扑博客原创、转载、摘录,或修订后发表,最后更新于 2016-03-28 02:12:28
侵权处理: 本个人博客,不盈利,若侵犯了您的作品权,请联系博主删除,莫恶意,索钱财,感谢!