28 10月 2009

[Python] 對以Dictionary or Class為item的List做Sort

Python中的List提供了sort的function,所以可以輕易地對以基本type為item( ex: [5,1,2,6,7] )的List做sort。但是如果List裡的item是Dictionary或是Class type,該如何做sort!?

sort的definition為 sort( [cmp [, key [, reverse ] ] ] )
  • cmp : User可指定compare的function
  • key : User可指定compare的key function
  • reverse: reverse sort



對Dictionary type做sort
以下為範例
d= [ {'id':0, 'value':9}, {'id':1, 'value':100}, {'id':5, 'value':99}, {'id':3, 'value':19}, {'id':2, 'value':59} ]
d.sort(key=lambda x:x['id']) #針對key 'id' 做sort
d.sort(key=lambda x:x['value']) #針對key 'value' 做sort

#以下用cmp,可以達到上面指定key的效果
d.sort(cmp=lambda x,y: cmp(x['id'], y['id']))
d.sort(cmp=lambda x,y: cmp(x['value'], y['value']))


對Class type做sort
以下為範例
class data:
    def __init__(self, _id, _value):
        self.id    = _id
        self.value = _value
c = [ data(0,9), data(1,100), data(5,99), data(3,19), data(2,59) ]
c.sort(key=lambda x:x.id)#針對class member id 做sort
c.sort(key=lambda x:x.value)#針對class member value 做sort

#以下用cmp,可以達到上面指定key的效果
c.sort(cmp=lambda x,y: cmp(x.id, y.id) )
c.sort(cmp=lambda x,y: cmp(x.value, y.value))

沒有留言: