现在的位置: 首页 > 综合 > 正文

Python List、Dict等的sort与sorted排序

2017年01月10日 ⁄ 综合 ⁄ 共 1309字 ⁄ 字号 评论关闭

List:

我们需要对List L进行排序,Python提供了两个方法


方法1.用List的成员函数sort进行排序

>>> a=[1,3,4,2,5]
>>> a.sort()
>>> a
[1, 2, 3, 4, 5]

Sort方法可加参数如下:

>>> help(list.sort)
Help on method_descriptor:

sort(...)
    L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*;
    cmp(x, y) -> -1, 0, 1

cmp:用于比较的函数,比较什么由key决定,有默认值,迭代集合中的一项;可用lambda表达式。
key:用列表元素的某个属性和函数进行作为关键字,有默认值,迭代集合中的一项;可用lambda表达式。
reverse:排序规则. reverse = True为降序 或者 reverse = False为升序,有默认值。


方法2.用built-in函数sorted进行排序

>>> a=[1,3,4,2,5]
>>> b=sorted(a)
>>> b
[1, 2, 3, 4, 5]

sorted方法可加参数如下:

>>> help(sorted)
Help on built-in function sorted in module __builtin__:

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

iterable:是可迭代类型;
cmp:同上;
key:同上;
reverse:同上;
返回值:是一个经过排序的可迭代类型,与iterable一样。


对比:sort为在原List进行排序,sorted产生新的排好序的List。


Dict:

同理,对于Dict等可迭代类型,在iterable位置需要传入dicta.iteritems(),在需要对比的数据则要放到key位置,key=operator.itemgetter(1)。

operator.itemgetter生成一个获取对象某维数据的函数,如:声明Dict
d

>>> d={}
>>> d[1]=4
>>> d[2]=5
>>> d[3]=6
>>> d
{1: 4, 2: 5, 3: 6}
>>> it=operator.itemgetter(1)     #获取第一个域的值
>>> it(d)
4
>>> it=operator.itemgetter(2,1)   #获取第二个和第一个域的值
>>> it(d)
(5, 4)

做个完整的测试:

>>> d={}
>>> d[1]=6
>>> d[2]=5
>>> d[3]=4
>>> sortedd = sorted(d.iteritems(), key=operator.itemgetter(1), reverse=True)
>>> sortedd
[(1, 6), (2, 5), (3, 4)]

上面代码取得了每个Dict的值,进行降序排列。

参考:

http://blog.csdn.net/dongtingzhizi/article/details/12068205

http://www.cnblogs.com/65702708/archive/2010/09/14/1826362.html

【上篇】
【下篇】

抱歉!评论已关闭.