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...