在以下数组中,我想在已知id时从数组a
中选择一个子数组
a=[['id123','ddf',1],['id456','ddf',1],['id789','ddf',1]]
我知道id,即id456,基于此我如何在不使用任何循环的情况下从['id456','ddf',1]
中选择值a
。
答案 0 :(得分:2)
>>> a = [['id123','ddf',1],['id456','ddf',1],['id789','ddf',1]]
>>> next(x for x in a if x[0] == 'id456')
['id456', 'ddf', 1]
但是,我会建议使用字典。
答案 1 :(得分:1)
我认为这应该有用......
filter(lambda x:x[0]=='id456',a)[0]
但在这种情况下,字典不是更好的数据结构吗?
答案 2 :(得分:0)
字典结构可以更好地工作。
b = {'id123': ['ddf', 1], 'id456': ['dff', 1], 'id789': ['ddf', 1]}
print b['id123']
答案 3 :(得分:0)
如果列表已排序,您可以使用bisect
模块:
>>> i = bisect.bisect_left(a, ['id456'])
>>> if i < len(a) and a[i][0]=='id456':
... print a[i]
...
['id456', 'ddf', 1]
答案 4 :(得分:0)
您可以使用numpy.where()
来执行此操作:
a = numpy.array(a)
row = numpy.where(a == 'id456')[0]
sub_array = a[row,:]
这将检查具有所需id的元素并返回其索引。您可以使用这些索引从原始数组中获取切片,如示例所示。
此代码仅在给定ID的单行时有效,但可以进行调整。
希望这有帮助。