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

Python中对Tuple之间排序时如何指定第几个元素为关键字排序的问题

2009-08-03 19:41 781 查看
因为Core Python Programming上的一个作业7-3

要求将一个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,真是不错!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐