2013-09-30 48 views
0

,我有以下數據集:訂單數據集與串行標記

import random 

def get_data(): 
    data = [] 
    for a in xrange(10): 
     serial_id = random.randint(0, 100) 
     node_data = 'data-%d' % (a) 
     data.append((serial_id, node_data)) 
    return data 

其中給出(當然,這是隨機的,所以YMMV):

[(58, 'data-0'), (37, 'data-1'), (68, 'data-2'), (80, 'data-3'), (89, 'data-4'), (42, 'data-5'), (2, 'data-6'), (90, 'data-7'), (53, 'data-8'), (7, 'data-9')] 

我想訂購此數據由serial_id設置,執行:

def order_data(data): 
    ... 
    return ordered 

發出的命令是:

[(2, 'data-6'), ... , (90, 'data-7')] 

什麼是最pythonic /有效的方式來做到這一點?

回答

2

使用sorted

return sorted(data) 

,或者,如果你不關心修改data,你可以使用.sort做了(稍微更有效)就地排序:

data.sort() 
return data 

元組的比較函數按照它們的第一個元素,然後是它們的第二個元素,依此類推。

+0

解釋:元組的默認排序是按順序比較元組中的每個元素。在這種情況下,默認排序將對元組的第一個元素進行排序,這是'serial_id'。如果'serial_id's相等,那麼它會在'node_data'上進行比較。 – Claudiu

+0

我明白了。如果'node_data'的實例不具可比性呢? – dangonfast

+0

然後您可以使用'.sort(key = lambda x:x [0])'(或'key = operator.itemgetter(0)')僅對第一個元素進行排序。 – nneonneo