Python中对Tuple之间排序时如何指定第几个元素为关键字排序的问题
2009-08-03 19:41
781 查看
因为Core Python Programming上的一个作业7-3
要求将一个Dictionary的key和value同时显示,并按key排序。
我做完之后就考虑如果要求按value排序呢?或者说多个Tuple之间排序时如果指定用第几个元素为关键字?
google了一下找到了答案,记一下:
解决方案有二:
方法一是采用lambda语法。
Python 支持一种有趣的语法,它允许你快速定义单行的最小函数。这些叫做 lambda 的函数,是从 Lisp 借用来的,可以用在任何需要函数的地方。
所以这题可以做为:
结果为:[('address', '202.101.1.22'), ('port', '8080'), ('pwd', 'athy'), ('protocol', 'http'), ('name', 'thy')]
方法二是采用operator模块的itemgetter函数
结果当然是一样的。
最后看看默认参数(即sorted(b))的结果:
[('address', '202.101.1.22'), ('name', 'thy'), ('port', '8080'), ('protocol', 'http'), ('pwd', 'athy')]
其中我更喜欢lambda的这样语法,毕竟这是从语言级来解决的。据说Boost库中也引入了lambda,真是不错!
要求将一个Dictionary的key和value同时显示,并按key排序。
我做完之后就考虑如果要求按value排序呢?或者说多个Tuple之间排序时如果指定用第几个元素为关键字?
google了一下找到了答案,记一下:
解决方案有二:
方法一是采用lambda语法。
Python 支持一种有趣的语法,它允许你快速定义单行的最小函数。这些叫做 lambda 的函数,是从 Lisp 借用来的,可以用在任何需要函数的地方。
>>> g = lambda x: x*2 #这就定义了一个函数,并且用g来记 >>> g(3) 6 >>> (lambda x: x*2)(3) #这同样定义了一个函数,并且没有名字 6
所以这题可以做为:
a={'port':'8080', 'protocol': 'http', 'address':'202.101.1.22', 'name':'thy', 'pwd':'athy'} b=zip(a.keys(), a.values()) #拉成Tuple对组成的List sorted(b, key=lambda item:item[1]) #将zip的每个Tuple传给lambda函数并记为item,将item[1]即Tuple的第二个元素作为返回值赋给key。
结果为:[('address', '202.101.1.22'), ('port', '8080'), ('pwd', 'athy'), ('protocol', 'http'), ('name', 'thy')]
方法二是采用operator模块的itemgetter函数
a={'port':'8080', 'protocol': 'http', 'address':'202.101.1.22', 'name':'thy', 'pwd':'athy'} b=zip(a.keys(), a.values()) #拉成Tuple对组成的List from operator import itemgetter sorted(b, key=itemgetter(1))
结果当然是一样的。
最后看看默认参数(即sorted(b))的结果:
[('address', '202.101.1.22'), ('name', 'thy'), ('port', '8080'), ('protocol', 'http'), ('pwd', 'athy')]
其中我更喜欢lambda的这样语法,毕竟这是从语言级来解决的。据说Boost库中也引入了lambda,真是不错!
相关文章推荐
- Python常见排序操作示例【字典、列表、指定元素等】
- Discuz常见小问题2-如何在数据库搜索指定关键字
- Python: Pandas的DataFrame如何按指定list排序
- python项目中不同文件夹py源文件之间如何相互调用--Python import中相对路径的问题
- python 2-2 如何为元组中的每个元素命名, 提高程序可读性-collections.namedtuple
- 【Python】简单例题tuple和list的转换;实现删除一个list里重复的元素;对list a进行排序,并且从最后一个开始删除重复元素
- python的list由多个tuple组成,如何返回每个tuple的每个元素
- python list元素为tuple时的排序方法
- python嵌入C++------ boost.python如何在C++中调用含有不定长参数tuple变量和关键字参数dict变量的函数
- python 如何将字符串转化为datetime.date【获取指定日期的上月和两个日期之间相差的月数】
- Golang 如何在切片尾部追加元素,又如何删除切片指定索引的元素,以及如何在切片中间插入元素,还有切片之间的复制
- python list元素为tuple时的排序
- Discuz常见小问题2-如何在数据库搜索指定关键字
- 如何删除动态数组的指定元素 - 回复 "Splendour" 的部分问题
- Python 列表如何获得一个指定元素所在的下标
- vector自定义数据结构数组按照指定元素排序
- c/s程序版本自动升级的问题,如何判断client端版本号是否最新,然后从指定ftp服务器down
- 如何利用pip将python模块安装到python指定的版本中
- java中删除list指定元素遇到的问题
- iOS应用之间跳转 本篇博文将涉及到以下知识点: app应用跳转的原理解析 如何实现两个app应用之间的跳转 如何实现两个app之间跳转到指定界面 二、应用跳转原理 相信从一个应用跳转到另一个应用