2014-03-04 57 views
0

我有一個嵌套列表,我想按內部和外部元素進行排序。我已經看過其他解決方案在stackoverflow並嘗試了幾個,但沒有一個以我想要的方式工作。下面,我介紹了四次不起作用的嘗試。每個代碼塊的評論都說明了我正在做什麼以及我想完成什麼。通過元素的兩個成員對嵌套列表進行排序

from operator import itemgetter 

# a representation of my real data to be sorted 
list_1 = [['key_e', ['v4eee', 'v1eee', 'v3eee', 'v2eee']], ['key_d', ['v4ddd', 'v1ddd', 'v3ddd', 'v2ddd']], ['key_a', ['v4aaa', 'v1aaa', 'v3aaa', 'v2aaa']], ['key_c', ['v4ccc', 'v1ccc', 'v3ccc', 'v2ccc']], ['key_b', ['v4bbb', 'v1bbb', 'v3bbb', 'v2bbb']]] 

""" 
# same data as above but formatted for readability 
list_1 = 
[ 
['key_e', ['v4eee', 'v1eee', 'v3eee', 'v2eee']], 
['key_d', ['v4ddd', 'v1ddd', 'v3ddd', 'v2ddd']], 
['key_a', ['v4aaa', 'v1aaa', 'v3aaa', 'v2aaa']], 
['key_c', ['v4ccc', 'v1ccc', 'v3ccc', 'v2ccc']], 
['key_b', ['v4bbb', 'v1bbb', 'v3bbb', 'v2bbb']] 
] 
""" 

# when running the code, pick 1 of the 4 below sort methods and comment out the other 3 

# sort method #1 that doesn't work the way I want it to 
list_1.sort(key = lambda x: x[1]) 
list_1.sort(key = itemgetter(0)) 

""" 
# sort method #2 that doesn't work the way I want it to 
list_1 = sorted(list_1, key = lambda x: (x[0], x[1])) 
""" 

""" 
# sort method #3 that doesn't work the way I want it to 
list_1.sort(key = itemgetter(1)) 
list_1.sort(key = itemgetter(0)) 
""" 

""" 
# sort method #4 that doesn't work the way I want it to 
list_1.sort(key = itemgetter(0, 1)) 
""" 

# print the sorted data 
for d in list_1: 
    print d[0] + ',' + d[1][0] + ',' + d[1][1] + ',' + d[1][2] + ',' + d[1][3] + '\r\n' 

""" 
# what I get using any of the sort methods 
key_a,v4aaa,v1aaa,v3aaa,v2aaa 
key_b,v4bbb,v1bbb,v3bbb,v2bbb 
key_c,v4ccc,v1ccc,v3ccc,v2ccc 
key_d,v4ddd,v1ddd,v3ddd,v2ddd 
key_e,v4eee,v1eee,v3eee,v2eee 

# what I want 
key_a,v1aaa,v2aaa,v3aaa,v4aaa 
key_b,v1bbb,v2bbb,v3bbb,v4bbb 
key_c,v1ccc,v2ccc,v3ccc,v4ccc 
key_d,v1ddd,v2ddd,v3ddd,v4ddd 
key_e,v1eee,v2eee,v3eee,v4eee 
""" 
+0

你能請解釋清楚的比較功能是什麼? –

回答

2

我想你想要子列表進行排序,並對外部列表進行排序。在這種情況下,這樣做在兩個步驟:

sorted_inner = [[k, sorted(l)] for k, l in list_1] 
sorted_outer = sorted(sorted_inner) 

這給了我:

sorted_outer == [['key_a', ['v1aaa', 'v2aaa', 'v3aaa', 'v4aaa']], 
       ['key_b', ['v1bbb', 'v2bbb', 'v3bbb', 'v4bbb']], 
       ['key_c', ['v1ccc', 'v2ccc', 'v3ccc', 'v4ccc']], 
       ['key_d', ['v1ddd', 'v2ddd', 'v3ddd', 'v4ddd']], 
       ['key_e', ['v1eee', 'v2eee', 'v3eee', 'v4eee']]] 
+0

這正是我想要的,謝謝。您的解決方案被投票作爲答案。 –

相關問題