多くの数値作業や配列操作を行っている場合は、を使用することを検討する価値があるかもしれません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')