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]
但是在这种情况下,字典不是更好的数据结构吗?
你可以用它numpy.where()
来做到这一点:
a = numpy.array(a)
row = numpy.where(a == 'id456')[0]
sub_array = a[row,:]
这将检查具有所需 id 的元素并返回它们的索引。如示例所示,您可以使用这些索引从原始数组中获取切片。
此代码仅在给定 ID 有单行时才有效,但可以对其进行调整。
希望这可以帮助。
字典结构会更好。
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]