多くの数値作業や配列操作を行っている場合は、を使用することを検討する価値があるかもしれませんnumpy。この問題は、numpy配列を使用すると非常に簡単に解決できます。
In [1]: import numpy as np
In [2]: a = ['hi','hello']
In [3]: b = ['alice','bob']
In [4]: c = ['foo','bar']
In [5]: d = ['spam','eggs']
In [6]: score = [42,17]
これから、形式でタプルのリストを作成し、(a,b,c,d,score)それぞれをdtypeで格納します。また、後でアクセスする(str,str,str,str,int)ために名前を付けることもできます。('a','b','c','d','score')
In [7]: data = np.array(zip(a,b,c,d,score),
   ...:         dtype = [('a','S5'),('b','S5'),('c','S5'),('d','S5'),('score',int)]
   ...:     )
In [8]: data
Out[8]: 
array([('hi', 'alice', 'foo', 'spam', 42),
       ('hello', 'bob', 'bar', 'eggs', 17)], 
      dtype=[('a', 'S5'), ('b', 'S5'), ('c', 'S5'), ('d', 'S5'), ('score', '<i8')])
この配列の利点は、名前ですべての「リスト」(フィールド)にアクセスできることです。
In [9]: data['a']
Out[9]: 
array(['hi', 'hello'], 
      dtype='|S5')
In [10]: data['score']
Out[10]: array([42, 17])
それらを並べ替えるには、並べ替えるフィールドの名前を指定するだけです。
In [11]: sdata = np.sort(data, order='score')
In [12]: sdata
Out[12]: 
array([('hello', 'bob', 'bar', 'eggs', 17),
       ('hi', 'alice', 'foo', 'spam', 42)], 
      dtype=[('a', 'S5'), ('b', 'S5'), ('c', 'S5'), ('d', 'S5'), ('score', '<i8')])
In [13]: sdata['b']
Out[13]: 
array(['bob', 'alice'], 
      dtype='|S5')