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}
![](http://img.blog.csdn.net/20150822140417006?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
注意
排序之后原字典没有变,顺序依旧
![](http://img.blog.csdn.net/20150822140432430?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
两个函数
1.lambda
功能: 创建匿名函数
区别: 和def函数定义,以下两点区别
lambda会创建一个函数对象,但不会把这个函数对象赋给一个标识符;而def则会把函数对象赋值给一个变量
lambda它只是一个表达式,而def则是一个语句
案例:
![](http://img.blog.csdn.net/20150822140444770?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
2.iteritems()
功能: iteritems()以迭代器对象返回字典键值对
区别: 和item相比:items以列表形式返回字典键值对
案例:
![](http://img.blog.csdn.net/20150822140455552?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
注释:
1:在函数sorted(dic.iteritems(), key = lambda asd:asd[1])中,第一个参数传给第二个参数“键-键值”,第二个参数取出其中的键([0])或键值(1])
2:sort函数
一、基本形式
列表有自己的sort方法,其对列表进行原址排序,既然是原址排序,那显然元组不可能拥有这种方法,因为元组是不可修改的。
![](http://img.blog.csdn.net/20150822140818040?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
如果需要一个排序好的副本,同时保持原有列表不变,怎么实现呢
![](http://img.blog.csdn.net/20150822140951751?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
注意:y = x[:] 通过分片操作将列表x的元素全部拷贝给y,如果简单的把x赋值给y:y = x,y和x还是指向同一个列表,并没有产生新的副本。
另一种获取已排序的列表副本的方法是使用sorted函数:
![](http://img.blog.csdn.net/20150822141059133?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
sorted返回一个有序的副本,并且类型总是列表,如下:
![](http://img.blog.csdn.net/20150822141332668?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
二、可选参数
sort方法还有两个可选参数:key和reverse
1、key在使用时必须提供一个排序过程总调用的函数:
![](http://img.blog.csdn.net/20150822141659516?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
2、reverse实现降序排序,需要提供一个布尔值:
![](http://img.blog.csdn.net/20150822141826995?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
3:reversed()
这个很好理解,reversed英文意思就是:adj. 颠倒的;相反的;(判决等)撤销的
字典,形如 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. 颠倒的;相反的;(判决等)撤销的
相关文章推荐
- Python 日期处理——datetime包学习(上)
- python学习笔记一
- Python 基础语法(一)
- Python爬虫之正则表达式
- windows7 配置 python开发环境
- python文件读写模式解析
- python读文件的三个方法read()、readline()、readlines()详解
- python 时间处理
- python编码笔记
- Python 实现文件复制、删除
- Python____初识+单线程爬虫
- Python pip – error: invalid command ‘bdist_wheel’
- python笔记 2
- 零基础学python-7.3 字符串的一般使用
- 零基础学python-7.3 字符串的一般使用
- python笔记1
- python telnet 登录
- 零基础学python-7.2 字符串常量
- 零基础学python-7.2 字符串常量
- 多线程在python中的使用 thread