python operator.itemgetter

来源:互联网 发布:淘宝维修手机可靠吗 编辑:程序博客网 时间:2024/06/06 01:01
 

python四个魔法方法__len__,__getitem__,__setitem__,__delitem_

[python] view plaincopyprint?
  1. class DictDemo:  
  2.       def __init__(self,key,value):  
  3.             self.dict = {}  
  4.             self.dict[key] = value  
  5.       def __getitem__(self,key):  
  6.             return self.dict[key]  
  7.       def __setitem__(self,key,value):  
  8.             self.dict[key] = value  
  9. dictDemo = DictDemo('key0','value0')  
  10. print(dictDemo['key0']) #value0  
  11. dictDemo['key1'] = 'value1'  
  12. print(dictDemo['key1']) #value1  

import weakref
实现weakref.ValueDict()    descriptor  重写 set方法                               

import weakref  #实现通过id获取object_id2obj_dict = weakref.WeakValueDictionary()def remember(obj):    oid = id(obj)    _id2obj_dict[oid] = obj    return oiddef id2obj(oid):    return _id2obj_dict[oid]

----

operator is a built-in module providing a set of convenient operators. In two wordsoperator.itemgetter(n) constructs a callable that assumes iterable object (list, tuple, set) as input an fetches n-th element out of it.

So, you can't use key=a[x][1] there, because python have no idea what x is. Instead, you could use alambda function (elem is just a variable name, no magic here):

a.sort(key=lambda elem: elem[1])

Or just ordinary function:

def get_second_elem(iterable):    return iterable[1]a.sort(key=get_second_elem)
--------------------
  • >>> students = ['dave', 'john', 'jane']>>> newgrades = {'john': 'F', 'jane':'A', 'dave': 'C'}>>> sorted(students, key=newgrades.__getitem__)['jane', 'dave', 'john']
>>> sorted(student_tuples, key=itemgetter(2), reverse=True)[('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]>>> sorted(student_objects, key=attrgetter('age'), reverse=True)[('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]

0 0
原创粉丝点击