Python 2d列表按列标题排序

时间:2014-12-06 15:10:01

标签: python list sorting 2d

我有一个2d列表:

['C', 'A', 'D', 'B'], #header row
['F', 'C', 'F', 'E'], #row 1
['F', 'E', 'F', 'F'], #row 2
['B', 'A', 'F', 'A'],
['A', 'F', 'C', 'E'],
['F', 'F', 'E', 'E'],
['C', 'E', 'F', 'C']

列表中的第一行是标题行:C,A,D,B。 如何更改此值以使列按顺序显示,以便显示:

['A', 'B', 'C', 'D'], #header row
['C', 'E', 'F', 'F'], #row 1
['E', 'F', 'F', 'F'], #row 2
['A', 'A', 'B', 'F'], 
['F', 'E', 'A', 'C'],
['F', 'E', 'F', 'E'],
['E', 'C', 'C', 'F']

我希望标题符合A,B,C,D的顺序,但也要使用标题移动下面的列

2 个答案:

答案 0 :(得分:2)

您可以使用sortedzip,首先使用zip(*a)创建列的列表,然后使用sorted对其进行排序(基于第一个索引),然后再次转换首先使用zip进行陈述,并使用map将索引转换为列表:

>>> map(list,zip(*sorted(zip(*a))))
[['A', 'B', 'C', 'D'],
 ['C', 'E', 'F', 'F'],
 ['E', 'F', 'F', 'F'], 
 ['A', 'A', 'B', 'F'], 
 ['F', 'E', 'A', 'C'], 
 ['F', 'E', 'F', 'E'], 
 ['E', 'C', 'C', 'F']]

答案 1 :(得分:0)

你可以使用numpy。

>>> import numpy as np
>>> data = np.array([['C', 'A', 'D', 'B'], #header row
... ['F', 'C', 'F', 'E'], #row 1
... ['F', 'E', 'F', 'F'], #row 2
... ['B', 'A', 'F', 'A'],
... ['A', 'F', 'C', 'E'],
... ['F', 'F', 'E', 'E'],
... ['C', 'E', 'F', 'C']])
>>> data[:,np.argsort(data[0])]  # select sorted indices of first row as column indices.
array([['A', 'B', 'C', 'D'],
       ['C', 'E', 'F', 'F'],
       ['E', 'F', 'F', 'F'],
       ['A', 'A', 'B', 'F'],
       ['F', 'E', 'A', 'C'],
       ['F', 'E', 'F', 'E'],
       ['E', 'C', 'C', 'F']], 
      dtype='|S1')