operator module在使用内置函数如map,itertools.groupby,sorted排序使用DSU技巧时,经常用到;这里面最经常用到的两个函数是:
operator.
attrgetter
(
attr
[
, args...
]
)
这个函数返回一个可调用对象(Callable Objects),取此对象的attr属性值;如果参数是多个属性,则返回的是属性值tuple.
例如:f
=
attrgetter('name')
,则 f(b)
返回的是 b.name
. f
=
attrgetter('name',
'date')
,则 f(b)
返回的是
(b.name,
b.date)
. Equivalent to:
def attrgetter(*items):
if len(items) == 1:
attr = items[0]
def g(obj):
return resolve_attr(obj, attr)
else:
def g(obj):
return tuple(resolve_att(obj, attr) for attr in items)
return g
def resolve_attr(obj, attr):
for name in attr.split("."):
obj = getattr(obj, name)
return obj
resolve_attr是用来处理属性名有.情 况;f
=
attrgetter('date.month')
,调用 f(b)
返回的是 b.date.month
.
应用举例DSU:
import operator
def sort_by_attr(seq, attr):
return sorted(seq, key=operator.attrgetter(attr))
def sort_by_attr_inplace(lst, attr):
lst.sort(key=operator.attrgetter(attr))
operator.
itemgetter
(
item
[
, args...
]
)
Return a callable object that fetches item
from its operand using the operand’s __getitem__()
method. If multiple items are specified, returns a tuple of lookup values. Equivalent to:
def itemgetter(*items):
if len(items) == 1:
item = items[0]
def g(obj):
return obj[item]
else:
def g(obj):
return tuple(obj[item] for item in items)
return g
The items can be any type accepted by the operand’s __getitem__()
method. Dictionaries accept any hashable value. Lists, tuples, and strings accept an index or a slice:
>>>
itemgetter
(
1
)(
'ABCDEFG'
)
'B'
>>>
itemgetter
(
1
,
3
,
5
)(
'ABCDEFG'
)
('B', 'D', 'F')
>>>
itemgetter
(
slice
(
2
,
None
))(
'ABCDEFG'
)
'CDEFG'
from operator import itemgetter
def dict_items_sorted_by_value(d, reverse=False):
return sorted(d.iteritems( ), key=itemgetter(1), reverse=reverse)
class Hist(object):
def __init__(self,dict={}):
self.adict = {}
def add(self,item,increment = 1):
self.adict[item] = increment + self.adict.get(item,0)
def counts(self,reverse=False):
return dict_items_sorted_by_value(self.adict,reverse)
if __name__ == '__main__':
sentence = ''' Hello there this is a test. Hello there this was a test,
but now it is not. '''
words = sentence.split( )
c = Hist( )
for word in words: c.add(word)
print "Ascending count:"
print c.counts( )
print "Descending count:"
print c.counts(reverse=True)
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com