我试图创建一个字典,将[1,1,0,0]等特定数组映射到字符串' Car'但字典不接受数组或列表
a={(1,1,0,0):'Car',
(0,0,0,1):'Pedestrian',
(1,0,0,0):'Traffic Light'}
b=np.array([[1,1,0,0],[1,0,0,0],[0,0,0,1]])
这两个代码都没有错误,但显然它们不匹配。这是我的想法:
b.map(a)
Out[3]=['Car','Traffic Light','Pedestrian']
提前致谢。
答案 0 :(得分:1)
一个简单的列表理解会做,将每个内部数组转换为元组,然后将其传递给dict进行查找:
>>> out = [a[tuple(x)] for x in b]
>>> out
['Car', 'Traffic Light', 'Pedestrian']
答案 1 :(得分:0)
您可以使用元组作为键来获取字符串。您不能将列表用作键的原因是因为列表可以被修改,并且您的代码中不会有其他位置修改您的字典键。
>>> a[[1,1,0,0]] # Won't work because it's not a tuple
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
>>> a[(1,1,0,0)] # Works
'Car'
如果要将列表用作键,则可以将其转换为
>>> a[tuple([1,1,0,0])]
'Car'
如果您有一个数组列表(如您的示例中所示),那么您可以像这样获取所有匹配的字符串
>>> b=np.array([[1,1,0,0],[1,0,0,0],[0,0,0,1]])
>>> [a[tuple(eachList)] for eachList in b]
['Car','Traffic Light','Pedestrian']
答案 2 :(得分:0)
如果您正在考虑效率如果b
是一个大数组,请将其转换为可用密钥:
B=(b<<np.arange(4)).sum(1)
# array([3, 1, 8], dtype=int32)
然后将dict定义为:
A={1: 'Traffic Light', 3: 'Car', 8: 'Pedestrian'}
现在的映射可以是:
[A[key] for key in B]