operator的itemgetter和attrgetter

前幾天在給個list作排序的時候,隱隱約約想起來有個語法糖能夠替代lambda函數,用來獲取list中dict的key,做爲排序的key。python

 

這個語法糖平時用得少,怎麼都想不起來。今天查看python標準庫operator時,終於把這兩個方法找到了,作個筆記。函數

 

由於就是一個語法糖,太簡單了,不必作太多解釋說明,直接貼代碼吧。spa

 

from operator import itemgetter, attrgetter

__author__ = 'blackmatrix'


get_name = lambda user: user['name']

get_address = lambda user: getattr(user, 'address')


class User:

    def __init__(self, name, address):
        self.name = name
        self.address = address


laowang = {'name': '老王', 'address': '隔壁'}
laoli = User('老李', '樓下')


if __name__ == '__main__':
    # itemgetter('name') 和 get_name 做用是相同的
    # 都是接受一個對象,獲取對象key爲name的值
    # 主要用來替代只是爲了獲取value的lambda函數
    print(itemgetter('name')(laowang))
    print(get_name(laowang))

    # 一樣的,attrgetter('address')也是等同於get_address
    # 用來替代只爲了獲取attr的lambda函數
    print(attrgetter('address')(laoli))
    print(get_address(laoli))
相關文章
相關標籤/搜索