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

python operator.itemgetter

2014-01-30 23:01 549 查看


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

[python] view
plaincopyprint?

class DictDemo:

def __init__(self,key,value):

self.dict = {}

self.dict[key] = value

def __getitem__(self,key):

return self.dict[key]

def __setitem__(self,key,value):

self.dict[key] = value

dictDemo = DictDemo('key0','value0')

print(dictDemo['key0']) #value0

dictDemo['key1'] = 'value1'

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 oid

def id2obj(oid):
return _id2obj_dict[oid]


----

operator
is
a built-in module providing a set of convenient operators. In two words
operator.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 a
lambda
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)]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: