a
次の配列では、IDがわかっているときに配列からサブ配列を選択したい
a=[['id123','ddf',1],['id456','ddf',1],['id789','ddf',1]]
私はid、つまりid456を知っています。これに基づいて、ループを使用せずに値['id456','ddf',1]
を選択するにはどうすればよいですか。a
>>> a = [['id123','ddf',1],['id456','ddf',1],['id789','ddf',1]]
>>> next(x for x in a if x[0] == 'id456')
['id456', 'ddf', 1]
ただし、代わりに辞書を使用することをお勧めします。
これでうまくいくと思います...
filter(lambda x:x[0]=='id456',a)[0]
しかし、この場合、辞書はより良いデータ構造ではないでしょうか?
辞書構造の方がはるかにうまく機能します。
b = {'id123': ['ddf', 1], 'id456': ['dff', 1], 'id789': ['ddf', 1]}
print b['id123']
リストがソートされている場合は、bisect
モジュールを使用できます。
>>> i = bisect.bisect_left(a, ['id456'])
>>> if i < len(a) and a[i][0]=='id456':
... print a[i]
...
['id456', 'ddf', 1]
あなたはそれをするために使うことができますnumpy.where()
:
a = numpy.array(a)
row = numpy.where(a == 'id456')[0]
sub_array = a[row,:]
これにより、目的のIDを持つ要素がチェックされ、それらのインデックスが返されます。例に示すように、これらのインデックスを使用して、元の配列からスライスを取得できます。
このコードは、指定されたIDに1つの行がある場合にのみ機能しますが、適応させることができます。
お役に立てれば。