我们知道 Python 的内置 dictionary 数据类型是无序的,通过 key 来获取对应的 value。可是有时我们需要对 dictionary 中的 item 进行排序输出,可能根据 key,也可能根据 value 来排。到底有多少种方法可以实现对 dictionary 的内容进行排序输出呢?
下面摘取了一些精彩的解决办法。
最简单的方法,这个是按照 key 值排序
- def sortedDictValues1(adict):
- items = adict.items()
- items.sort()
- return [value for key, value in items]
-
又一个按照 key 值排序,貌似比上一个速度要快点
- def sortedDictValues2(adict):
- keys = adict.keys()
- keys.sort()
- return [dict[key] for key in keys]
-
还是按 key 值排序,据说更快。而且当 key 为 tuple 的时候照样适用
- def sortedDictValues3(adict):
- keys = adict.keys()
- keys.sort()
- return map(adict.get, keys)
-
一行语句搞定
- [(k,di[k]) for k in sorted(di.keys())]
-
根据 value 排序的,先把 item 的 key 和 value 交换位置放入一个list中,再根据 list 每个元素的第一个值,即原来的 value 值,排序:
- def sort_by_value(d):
- items=d.items()
- backitems=[[v[1],v[0]] for v in items]
- backitems.sort()
- return [ backitems[i][1] for i in range(0,len(backitems))]
-
还是一行搞定
- [ v for v in sorted(d.values())]
-
用 lambda 表达式来排序,更灵活:
- sorted(d.items(), lambda x, y: cmp(x[1], y[1]))
-
或反序:
- sorted(d.items(), lambda x, y: cmp(x[1], y[1]), reverse=True)
-
按照 key 进行排序
- print sorted(dict1.items(), key=lambda d: d[0])
-
按照 value 进行排序
- print sorted(dict1.items(), key=lambda d: d[1])
-
下面给出 python 内置 sorted 函数的帮助文档:
- sorted(...)
- sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list
-
看了上面这么多种对 dictionary 排序的方法,其实它们的核心思想都一样,即把 dictionary 中的元素分离出来放到一个 list 中,对 list 排序,从而间接实现对 dictionary 的排序。这个元素可以是 key,value 或者 item。