1

a在以下数组中,我想在已知 id 时从数组中选择一个子数组

a=[['id123','ddf',1],['id456','ddf',1],['id789','ddf',1]]

我知道 id 即 id456,基于此我如何在不使用任何循环的情况下['id456','ddf',1]从中选择值。a

4

5 回答 5

2
>>> a = [['id123','ddf',1],['id456','ddf',1],['id789','ddf',1]]
>>> next(x for x in a if x[0] == 'id456')
['id456', 'ddf', 1]

但是,我建议改用字典。

于 2012-06-04T12:58:33.827 回答
1

我认为这应该工作......

filter(lambda x:x[0]=='id456',a)[0]

但是在这种情况下,字典不是更好的数据结构吗?

于 2012-06-04T12:57:57.393 回答
0

你可以用它numpy.where()来做到这一点:

a = numpy.array(a)

row = numpy.where(a == 'id456')[0]

sub_array = a[row,:]

这将检查具有所需 id 的元素并返回它们的索引。如示例所示,您可以使用这些索引从原始数组中获取切片。

此代码仅在给定 ID 有单行时才有效,但可以对其进行调整。

希望这可以帮助。

于 2012-06-04T13:39:32.533 回答
0

字典结构会更好。

b = {'id123': ['ddf', 1], 'id456': ['dff', 1], 'id789': ['ddf', 1]}
print b['id123']
于 2012-06-04T13:21:46.623 回答
0

如果列表已排序,则可以使用该bisect模块:

>>> i = bisect.bisect_left(a, ['id456'])
>>> if i < len(a) and a[i][0]=='id456':
...     print a[i]
...
['id456', 'ddf', 1]
于 2012-06-04T13:26:22.360 回答