注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

中吴南顾惟一笑

成功法则就是那19个字

 
 
 

日志

 
 

python实现记录集的排序  

2015-03-11 11:56:15|  分类: R&D |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

    众所周知,记录集在python中可以用多维list表示,那如何实现类似数据库中记录集的排序呢

python对容器内数据的排序有两种,一种是容器自己的sort函数,一种是内建的sorted函数。

sort和sorted唯一的不同是,sort在容器内排序,sorted生成一个新的排好序的容器。

sorted(...)
    sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list

    iterable:待排序的可迭代类型的容器;
    cmp:用于比较的函数,比较什么由key决定,有默认值,迭代集合中的一项;
    key:用列表元素的某个已命名的属性或函数(只有一个参数并且返回一个用于排序的值)作为关键字,有默认值,迭代集合中的一项;
    reverse:排序规则. reverse = True 或者 reverse = False,有默认值。
    返回值:是一个经过排序的可迭代类型,与iterable一样。

 

如果是一个多维的列表L的排序,以按第二项排序为例
可以利用cmp函数
    sorted(L, cmp=lambda x,y:cmp(x[1],y[1]))
    L.sort(cmp=lambda x,y:cmp(x[1],y[1]))
也可利用key
    sorted(L, key=lambda x:x[1])
    L.sort(key=lambda x:x[1])

按两列排序
    d = [('banana', 3, 'tb'), ('apple', 4, 'ts'), ('pear', 1, 'a'), ('orange', 2, 'd'), ('banana', 2, 'cc')]
    d.sort(key=lambda t:(t[0],t[2]))
    d
    >>>[('apple', 4, 'ts'), ('banana', 2, 'cc'), ('banana', 3, 'tb'), ('orange', 2, 'd'), ('pear', 1, 'a')]

另外,如果用dict来实现记录集的话,可以考虑OrderedDict来排序
OrderedDict是collections中的一个包,不过需要注意key的唯一性
按第二列排序
    collections.OrderedDict(sorted(d.items(),key = lambda t:t[1]))
或者按按第二项长度排序
    collections.OrderedDict(sorted(d.items(),key = lambda t:len(t[0])))

  评论这张
 
阅读(93)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017