如何在Python中创建数组字典到字符串?

时间:2017-11-14 23:45:54

标签: python arrays python-3.x dictionary

我试图创建一个字典,将[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']

提前致谢。

3 个答案:

答案 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]