city': 'frankfurt', 'name': 'david'}, {'age': 71, 'city': 'tokyo', 'name': 'john'}] 其实,key用operator.itemgetter 指定想要排序的元素,并且速度更快 from operator import itemgetter data = [ {'age': 31, 'city': 'taipei', 'name': ' rio', 'name': 'cathy'}, {'age': 48, 'city': 'frankfurt', 'name': 'david'}] print(sorted(data, key=itemgetter
operator.itemgetter函数 operator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为一些序号(即需要获取的数据在对象中的序号),下面看例子。 a = [1,2,3] >>> b=operator.itemgetter(1) //定义函数b,获取对象的第1个域的值 >>> b(a) 2 >>> b=operator.itemgetter (1,0) //定义函数b,获取对象的第1个域和第0个的值 >>> b(a) (2, 1) 要注意,operator.itemgetter函数获取的不是值,而是定义了一个函数,通过该函数作用到对象上才能获取值 使用itemgetter来进行排序,使用元组的第二个元素进行排序 ? 使用元组的第一个元素进行排序 ? 有了上面的operator.itemgetter函数,也可以用该函数来实现,例如要通过student的第三个域排序,可以这么写: sorted(students, key=operator.itemgetter
itemgetter 函数可以生成高效的 getter 函数版本,可以与 sorted() 函数结合使用以提高排序操作的性能。 [13]: sorted(data,key = itemgetter(1)) Out[13]: [('b', 1), ('a', 2), ('c', 3)] 你可能好奇,itemgetter 是如何工作的 ]: getter = itemgetter('c') In [23]: getter(item) Out[23]: 3 itemgetter() 是 Python 标准库的一部分,向 itemgetter () 传递一个参数,这个参数或者是索引位置,或者是字典的键,然后 itemgetter() 函数将返回一个可以调用的 getter 对象。 现在让我们来测试一下 lambda 和 itemgetter 在排序时,到底哪个更高效? 从上面的结果可以看出,使用 itemgetter() 更高效。
从机器学习学python(二)——iteritems、itemgetter、sorted、sort (原创内容,转载请注明来源,谢谢) 一、iteritems 这个方法由python的dict类型可以调用 二、operator.itemgetter 这个是python的operator模块,其中提供的itemgetter函数用于获取对象的哪些维的数据,参数为一些序号。 要注意,operator.itemgetter函数获取的不是值,而是定义了一个函数,通过该函数作用到对象上才能获取值。 示例如下: a = [1,2,3] >>> b=operator.itemgetter(1) //定义函数b,获取对象的第1个域的值 >>> b(a) 2 >>> b=operator.itemgetter , attrgetter >>> sorted(students, key=itemgetter(1,2)) # sort by grade then by age [('john', 'A',
解决方案:结合itemgetter和列表推导式:result = [itemgetter('city')(itemgetter('address')(user)) for user in users]# 或更清晰的分步写法get_address = itemgetter('address')get_city = itemgetter('city')result = [get_city(get_address = itemgetter('name') # 每次循环都创建新对象 print(get_name(user)) # 正确做法 get_name = itemgetter('name') for pandas结构化数据分析功能强大,支持向量化操作依赖第三方库,内存消耗大attrgetter对象属性提取与itemgetter语法一致仅适用于自定义对象选择建议:纯字典列表操作:优先itemgetter 掌握它后,你会自然地写出这样的代码:# 提取用户ID、姓名和前两个订单金额get_user_data = itemgetter('id', 'name')get_order_amounts = itemgetter
itemgetter 神器详解你是不是经常遇到这种麻烦事? itemgetter是 Python 标准库operator里的一个函数,不用额外安装,直接导入就能用:# 第一步:导入itemgetter(必须先做这步)from operator import itemgetter2 用itemgetter造一个“拿索引1元素”的工具get_index_1 = itemgetter(1) # 这里不是拿数据,是造工具!# 2. 问题 1:直接调用 itemgetter,不传入数据(最常见)错误示例:from operator import itemgetter# 错误:以为itemgetter(1)能直接拿数据,其实它只是个工具 问题 1:itemgetter 和 lambda 有什么区别?什么时候用 itemgetter 更好?
的用法见 注释2) Python代码 >>> from operator import itemgetter, attrgetter >>> sorted(students, key=itemgetter (__builtin__.object) | itemgetter(item, ...) --> itemgetter object | | Return a callable object | After, f=itemgetter(2), the call f(r) returns r[2]. | After, g=itemgetter(2,5,3), the call g(r) returns (r[2], r[5], r[3]) 相当于 Python代码 def itemgetter (1) >>> b(a) 2 >>> b=operator.itemgetter(1,0) >>> b(a) (2, 1) >>> b=itemgetter(1)
35512245/article/details/78639317 出现错误的代码时: result = sorted(classCount.iteritems(), key=operator.itemgetter iteritems' 之所以会出现上述错误是因为python3中已经没有这个属性,直接改为items即可: result = sorted(classCount.items(), key=operator.itemgetter (1), reverse=True) ---- 知识点补充: operator.itemgetter函数 operator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为一些序号(即需要获取的数据在对象中的序号 a = [1,2,3] b=operator.itemgetter(1) //定义函数b,获取对象的第1个域的值 print(b(a)) 输出: 2 b=operator.itemgetter (1,0) //定义函数b,获取对象的第1个域和第0个域的值 print(b(a)) 输出: (2, 1) 要注意,operator.itemgetter函数获取的不是值,而是定义了一个函数
>>> name [('a', 5), ('c', 3), ('b', 4), ('e', 1), ('d', 2)] >>> name.sort(key=operator.itemgetter(1)) operator模块的itemgetter函数介绍 class itemgetter(__builtin__.object) | itemgetter(item, ...) --> itemgetter | After f = itemgetter(2), the call f(r) returns r[2]. | After g = itemgetter(2, 5, 3), the call g(r) returns (r[2], r[5], r[3]) >>> name [('a', 5), ('c' , 3), ('b', 4), ('e', 1), ('d', 2)] >>> key = operator.itemgetter(3) >>> key(name) ('e', 1) #其中的调用关系
python 5行 a = [1,2,3] b = [5,6,7] c = map(operator.mul, a, b) # c的值就为[5, 12, 21] 这里只介绍它的itemgetter operator — Standard operators as functions operator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为一些序号(即需要获取的数据在对象中的序号 bash 8行 a = [1,2,3] >>> b=operator.itemgetter(1) //定义函数b,获取对象的第1个域的值 >>> b(a) 2 >>> b=operator.itemgetter (1),reverse=True) >>> [('da', 95), ('bc', 16), ('a', 15), ('ab', 6)] 看到这你会不会觉得operator的itemgetter函数可以用 文章参考: Python中的sorted函数以及operator.itemgetter函数 python中的operator库 written by MARSGGBO 2017-2-14
operator.itemgetter rows = [ {'fname': 'Brian', 'lname': 'Jones', 'uid': 1003}, {'fname': 'David', rows_by_fname = sorted(rows, key=itemgetter('fname')) rows_by_uid = sorted(rows, key=itemgetter('uid ')) print(rows_by_fname) print(rows_by_uid) rows_by_lfname = sorted(rows, key=itemgetter('lname','fname ')) print(rows_by_lfname) min(rows, key=itemgetter('uid')) {'fname': 'John', 'lname': 'Cleese', 'uid': 1001} max(rows, key=itemgetter('uid')) {'fname': 'Big', 'lname': 'Jones', 'uid': 1004}
value for key, value in a.items() if value > 4.0} print(da) # {'apple': 5.6, 'orange': 4.7} 3 Key使用itemgetter 多字段排序 from operator import itemgetter a = [{'date': '2019-12-15', 'weather': 'cloud'}, {'date': '2019-12-13', 'weather': 'sunny'}, {'date': '2019-12-14', 'weather': 'cloud'}] a.sort(key=itemgetter 分组 from operator import itemgetter from itertools import groupby a.sort(key=itemgetter('weather', 'date ')) # 必须先排序再分组 for k, items in groupby(a, key=itemgetter('weather')): print(k) for i in items
value for key, value in a.items() if value > 4.0} print(da) # {'apple': 5.6, 'orange': 4.7} 3 Key使用itemgetter 多字段排序 from operator import itemgetter a = [{'date': '2019-12-15', 'weather': 'cloud'}, {'date': '2019-12-13', 'weather': 'sunny'}, {'date': '2019-12-14', 'weather': 'cloud'}] a.sort(key=itemgetter 分组 from operator import itemgetter from itertools import groupby a.sort(key=itemgetter('weather', 'date ')) # 必须先排序再分组 for k, items in groupby(a, key=itemgetter('weather')): print(k) for i in items
>>> from operator import itemgetter >>> gameresult = [['Bob', 95.0, 'A'], ['Alan 83.5, 'A'], ['Rob', 89.3, 'E']] #按子列表第3个元素进行升序排序 >>> sorted(gameresult, key=itemgetter 83.5, 'A'], ['Alan', 86.0, 'C'], ['Rob', 89.3, 'E']] #按第3个元素升序,然后按第1个升序 >>> sorted(gameresult, key=itemgetter 95.0, 'A'], ['Mandy', 83.5, 'A'], ['Alan', 86.0, 'C'], ['Rob', 89.3, 'E']] >>> sorted(gameresult, key=itemgetter Patty', 'wins':9, 'losses':3, 'rating':72.8}] #按’wins’升序,该值相同的按’name’升序排序 >>> sorted(gameresult, key=itemgetter
#coding:utf-8 from operator import attrgetter,itemgetter list1 = [(2,'huan',23),(12,'the',14),(23, 函数进行重写key所代表的函数,按照下标为1处的元素进行排序 list1.sort(key=itemgetter(1)) print list1 #[(2, 'huan', 23), (23, =itemgetter(2)) print list1 # [(12, 'the', 14), (2, 'huan', 23), (23, 'liu', 90)] # 此处可以类比lambda operator.itemgetter()函数用于获取对象的哪些维的数据,参数为一些序号(即需要获取的数据在对象中的序号)。看例子 ''' 遇到问题没人解答? ''' a = [1,2,3] >>> b=operator.itemgetter(1) //定义函数b,获取对象的第1个域的值 >>> b(a) >>> b=operator.itemgetter
函数 operator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为一些序号(即需要获取的数据在对象中的序号),下面看例子。 a = [1,2,3] >>> b=operator.itemgetter(1) //定义函数b,获取对象的第1个域的值 >>> b(a) 2 >>> b=operator.itemgetter (1,0) //定义函数b,获取对象的第1个域和第0个的值 >>> b(a) (2, 1) 要注意,operator.itemgetter函数获取的不是值,而是定义了一个函数,通过该函数作用到对象上才能获取值 有了上面的operator.itemgetter函数,也可以用该函数来实现,例如要通过student的第三个域排序,可以这么写: sorted(students, key=operator.itemgetter (2)) sorted函数也可以进行多级排序,例如要根据第二个域和第三个域进行排序,可以这么写: sorted(students, key=operator.itemgetter(1,2)) 即先跟句第二个域排序
key=lambda i:i[1]) #结果: [('d', 1), ('c', 2), ('b', 3), ('a', 4)] 通过某个关键字排序一个字典列表 通过使用 operator 模块的 itemgetter 函数,可以非常容易的排序这样的数据结构,代码如下: from operator import itemgetter name=[{'name': 'Big', 'lname': 'Jones', 'uid , 'uid': 1002}, {'name': 'John', 'lname': 'Cleese', 'uid': 1001}] rows_by_fname = sorted(name, key=itemgetter name': 'Brian', 'lname': 'Jones', 'uid': 1003}, {'name': 'Big', 'lname': 'Jones', 'uid': 1004}] itemgetter () 函数也支持多个 keys,比如下面的代码: rows_by_lfname = sorted(name, key=itemgetter('lname','name')) #结果: [{'name':
, 'Rose', 13], [5, 'Sam', 12], [3, 'Jack', 12], [1, 'Tom', 10], [4, 'Joy', 8]] 方法二: 使用 operator 模块的 itemgetter from operator import itemgetter 按学号顺序排序: sorted(students,key=itemgetter(0)) 按年龄倒序排序: sorted(students, key=itemgetter(2),reverse=True) 按年龄为主要关键字,名字为次要关键字倒序排序: print(sorted(students,key=itemgetter(2,1),reverse
, y[2]))# sort by age [(‘dave’,‘B’,10),(‘jane’,‘B’,12),(‘john’,‘A’,15)] 用 operator 函数来加快速度,上面排序等价于:(itemgetter 的用法见注释2) from operator import itemgetter, attrgette sorted(students, key=itemgetter(2)) 用 operator 函数进行多级排序 sorted(students, key=itemgetter(1,2))# sort by grade then by age [(‘john’,‘A’,15),(‘dave’,‘B’,10),(‘ jane’,‘B’,12)] 2.对由字典排序 d ={‘data1’:3,‘data2’:1,‘data3’:2,‘data4’:4} sorted(d.iteritems(), key=itemgetter
注解的最大作用是:为IDE和lint程序的静态检查功能提供额外的类型信息 itemgetter 返回一个根据索引提取元素的函数 from operator import itemgetter class itemgetter: """ Return a callable object that fetches the given item(s) from its operand. After f = itemgetter(2), the call f(r) returns r[2]. _items 等价于 def itemgetter(*items): if len(items) == 1: item = items[0] def g(obj a = [0, 1, 2, 3, 4] x = itemgetter(1) print(x(a)) # 1 x = itemgetter(1, 2) print(x(a)) # (1, 2)