您的位置:首页 > 编程语言 > Python开发

python 字典排序

2015-08-22 14:21 543 查看
引子

字典,形如 dic = {'a':1 , 'b':2 , 'c': 3},字典中的元素没有顺序,所以dic[0]是有语法错误的。并且不可以有重复的键值,所以 dic.add['c'] = 4后,字典变成 {'a':1 , 'b':2 , 'c': 4}.

待解决问题

如何根据需要可以根据“键”或“键值”进行不同顺序的排序?

函数原型

sorted(dic,value,reverse)

dic为比较函数,value 为排序的对象(这里指键或键值),
reverse:注明升序还是降序,True--降序,False--升序(默认)

案例

dic = {'a':3 , 'b':2 , 'c': 1}




注意

排序之后原字典没有变,顺序依旧




两个函数

1.lambda

功能: 创建匿名函数

区别: 和def函数定义,以下两点区别

lambda会创建一个函数对象,但不会把这个函数对象赋给一个标识符;而def则会把函数对象赋值给一个变量
lambda它只是一个表达式,而def则是一个语句

案例:




2.iteritems()

功能: iteritems()以迭代器对象返回字典键值对

区别: 和item相比:items以列表形式返回字典键值对

案例:




注释:

1:在函数sorted(dic.iteritems(), key = lambda asd:asd[1])中,第一个参数传给第二个参数“键-键值”,第二个参数取出其中的键([0])或键值(1])

2:sort函数

一、基本形式

列表有自己的sort方法,其对列表进行原址排序,既然是原址排序,那显然元组不可能拥有这种方法,因为元组是不可修改的。



如果需要一个排序好的副本,同时保持原有列表不变,怎么实现呢



注意:y = x[:] 通过分片操作将列表x的元素全部拷贝给y,如果简单的把x赋值给y:y = x,y和x还是指向同一个列表,并没有产生新的副本。

另一种获取已排序的列表副本的方法是使用sorted函数:



sorted返回一个有序的副本,并且类型总是列表,如下:



二、可选参数

sort方法还有两个可选参数:key和reverse

1、key在使用时必须提供一个排序过程总调用的函数:



2、reverse实现降序排序,需要提供一个布尔值:



3:reversed()

这个很好理解,reversed英文意思就是:adj. 颠倒的;相反的;(判决等)撤销的

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: