attrgetter和itemgetter的區別

2021-09-01 02:26:43 字數 2652 閱讀 4448

itemgetter 的常見用途:

根據元組的某個字段(index)給元組列表排序。

attrgetter的常見用途:

根據元組的某個字段(key)給元組列表排序,支援巢狀。

例:使用 itemgetter 排序乙個元組列表

metro_data = [

('tokyo', 'jp', 36.933, (35.689722, 139.691667)),

('delhi ncr', 'in', 21.935, (28.613889, 77.208889)),

('mexico city', 'mx', 20.142, (19.433333, -99.133333)),

('new york-newark', 'us', 20.104, (40.808611, -74.020386)),

('sao paulo', 'br', 19.649, (-23.547778, -46.635833)),

]from operator import itemgetter

for city in sorted(metro_data,key=itemgetter(1)):

print(city)#1

cc_name = itemgetter(1,0)

for city in metro_data:

print(cc_name(city))#2

輸出:

1.

('sao paulo', 'br', 19.649, (-23.547778, -46.635833))

('delhi ncr', 'in', 21.935, (28.613889, 77.208889))

('tokyo', 'jp', 36.933, (35.689722, 139.691667))

('mexico city', 'mx', 20.142, (19.433333, -99.133333))

('new york-newark', 'us', 20.104, (40.808611, -74.020386))

2.('jp', 'tokyo')

('in', 'delhi ncr')

('mx', 'mexico city')

('us', 'new york-newark')

('br', 'sao paulo')

解析:

itemgetter(1) 的作用與 lambda fields:fields[1] 一樣: 建立乙個接受集合的函式, 返回索引位 1 上的元素。

如果把多個引數傳給 itemgetter, 它構建的函式會返回提取的值構成的元組。

例:顯示城市和維度,根據維度排序

from collections import namedtuple

metro_data = [

('tokyo', 'jp', 36.933, (35.689722, 139.691667)),

('delhi ncr', 'in', 21.935, (28.613889, 77.208889)),

('mexico city', 'mx', 20.142, (19.433333, -99.133333)),

('new york-newark', 'us', 20.104, (40.808611, -74.020386)),

('sao paulo', 'br', 19.649, (-23.547778, -46.635833)),

]latlong = namedtuple('latlong', 'lat long')

metropolis = namedtuple('metropolis', 'name cc pop coord')

metro_areas = [metropolis(name, cc, pop, latlong(lat, long)) for name, cc, pop, (lat, long) in metro_data]

from operator import attrgetter

name_lat = attrgetter('name', 'coord.lat')

for city in sorted(metro_areas,key=attrgetter('coord.lat')):

print(name_lat(city))

輸出:

('sao paulo', -23.547778)

('mexico city', 19.433333)

('delhi ncr', 28.613889)

('tokyo', 35.689722)

('new york-newark', 40.808611)

解析:

如果把多個屬性名傳給 attrgetter, 它也會返回提取的值構成的元組。key=attrgetter(『coord.lat』)可以加入key=attrgetter(『coord.lat』,『coord.long』)當維度相同時比較經度。

參考《流暢的python》5.10

python之attrgetter函式對物件排序

1 使用attrgetter函式對物件排序3 attrgetter處理物件,itemgetter處理序列45 from operator import attrgetter67 8class user 9def init self,name,age 10 self.name name 11 self...

Android listview的item設定高度

在item的layout檔案中,用android layout height設定item的高度。執行,高度設定無效。解決辦法 給item設定minheight,即可.最近一直糾結於listview中每個item中高度的問題,在網上只找出乙個方法,就是在每個item裡面加入,也就是imageview,...

item系列方法

通過中括號取值obj item 觸發它的執行,無論item是否存在。通過中括號賦值obj key value觸發它的執行,無論key是否存在。通過中括號刪除值del obj key 觸發它的執行,無論key是否存在。class dog head 1 def getitem self,item pri...