Python中最快的字典排序方法
来源:互联网 发布:手机网络位置需要权限 编辑:程序博客网 时间:2024/05/17 04:26
怎么让Python字典根据值快速排序.07年的时候, NICK GALBREATH在博客上发过一篇post post on sorting by value at Digital Sanitation Engineering介绍了一种方法, 并声称这个方法是“the fastest way to do this and it uses the least amount of memory. Enjoy.” 一般能这样声称的, 都会遭到别人质疑, 况且在python官网的Python Enhancement Proposals目录下, 还有不同的说法. 在PEP 265页面中,介绍了另外一种方法, 也说是最好的. 到底什么才是最快的字典排序方法?
Gregg Lind为了一探究竟,在去年7月的时候作了一次各种方法集合的比较, 比较的源代码如下:
def sbv0(adict,reverse=False): return sorted(adict.iteritems(), key=lambda (k,v): (v,k), reverse=reverse)def sbv1(d,reverse=False): L = [(k,v) for (k,v) in d.iteritems()] return sorted(L, key=lambda x: x[1] , reverse=reverse)def sbv2(d,reverse=False): L = ((k,v) for (k,v) in d.iteritems()) return sorted(L, key=lambda x: x[1] , reverse=reverse)def sbv3(d,reverse=False): return sorted(d.iteritems(), key=lambda x: x[1] , reverse=reverse)def sbv4(d,reverse=False): def sk(x): return x[1] return sorted(d.iteritems(), key=sk , reverse=reverse)def sk(x): return x[1]def sbv5(d,reverse=False): return sorted(d.iteritems(), key=sk , reverse=reverse)from operator import itemgetterdef sbv6(d,reverse=False): return sorted(d.iteritems(), key=itemgetter(1), reverse=True)D = dict(zip(range(100),range(100)))from profile import runfor ii in xrange(10000): sbv6(D, reverse=True)#run(for ii in xrange(10000): sbv0(D, reverse=True))#run(for ii in xrange(10000): sbv1(D, reverse=True))#run(for ii in xrange(10000): sbv2(D, reverse=True))#run(for ii in xrange(10000): sbv3(D, reverse=True))#run(for ii in xrange(10000): sbv4(D, reverse=True))#run(for ii in xrange(10000): sbv5(D, reverse=True))#run(for ii in xrange(10000): sbv6(D, reverse=True))
具体的结果, 直接拷贝代码到你的本机下运行即可知道. 在我这里, sbv6的时间是0.578s, 最慢的是用generator的sbv2, 22s左右, 其他时间是差不多的, 都是11s左右.
总的来说, PEP 265 介绍的方法基本是别的方法十倍左右的速度. 看来, 还是官网的东西比较可信阿:)
- Python中最快的字典排序方法
- Python中最快的字典排序方法
- 传说中最快的python字典排序方法
- python的中字典的排序
- python中字典的排序和复制
- Python字典按值排序、包含字典的列表按字典值排序的方法
- Python字典按值排序、包含字典的列表按字典值排序的方法
- Python字典按值排序、包含字典的列表按字典值排序的方法
- Python字典按值排序、包含字典的列表按字典值排序的方法
- Python字典按值排序、包含字典的列表按字典值排序的方法
- Python字典按值排序、包含字典的列表按字典值排序的方法
- Python字典按值排序、包含字典的列表按字典值排序的方法
- Python字典按值排序、包含字典的列表按字典值排序的方法
- Python的字典排序
- Python 字典的排序
- python 字典的排序
- python中字典的常用方法
- Python中字典的items()方法
- Hibernate中常用的主键生成策略
- reinterpret_cast的本质
- MySQL 部分操作
- codeblocks 树的遍历 递归和非递归
- 编译内核模块
- Python中最快的字典排序方法
- 怎么查看80端口占用情况_如何查看端口占用情况
- [JAVA] 有趣的 double 型
- 对apache proxypass的讲解
- BCB 数据库主从表结构
- php上传大文件设置
- hdu 1020 Train Problem I
- 无证程序员?
- Error Page在IE下不能转发的问题