参考文章http://www.cnblogs.com/100thMountain/p/4719503.html
这几日胡哥在旁边疯狂阅读deep walk之类的算法和论文,下了包之后研究源码。突然喊我:诶,kf,你看这个。
我一看,是以前没用过的itemgetter,于是百度了一。
itemgetter和sorted很适合于列表循环,比如下面的场景:
score = [('A',80),('B',82),('C',70)]
现在要按列表里各元祖的第二位排序,怎么排?
其实使用sorted函数+itemgetter可以很容易实现。
sorted(score, key=operator.itemgetter(1))
结果是[('C', 70), ('A', 80), ('B', 82)],很方便吧。
大家应该知道,python还有一个sort函数,那么sort函数和sorted函数有什么呢?
sort()是可变对象(字典、列表)的方法,不需要参数,并且没有返回值(sort()会改变可变对象,因此无需返回值);而sorted()是python的内置函数,并不是可变对象(列表、字典)的特有方法,sorted()函数需要一个参数(参数可以是列表、字典、元组、字符串),无论传递什么参数,都将返回一个以列表为容器的返回值,如果是字典将返回键的列表。简单来说,如果一个列表a = [2,9,4,8],使用sort()函数,a本身就被修改了。而使用sorted(a),就需要赋值给新的变量。
而itemgetter是Operator 模块函数。看一下它的使用方法:
f = itemgetter(1)
a = [1,2,3]
f(a)
输出是2,你发现f像什么?像一个函数。其实operator.itemgetter函数获取的不是值,而是定义了一个函数,通过该函数作用到对象上才能获取值。
所以现在再看sorted(score, key=operator.itemgetter(1))你就能看懂了吧。