如何使用字典来翻译/替换数组的元素?[重复]


问题内容

这个问题已经在这里有了答案

快速替换numpy数组中的值 (10个答案)

4年前关闭。

我有一个numpy数组,其中包含数百个大写字母的元素,没有特定顺序

import numpy as np
abc_array = np.array(['B', 'D', 'A', 'F', 'H', 'I', 'Z', 'J', ...])

此元素中的每个元素numpy.ndarray都是一个numpy.string_

我还有一个“翻译词典”,带有键/值对,以便大写字母对应于一个城市

transdict = {'A': 'Adelaide', 'B': 'Bombay', 'C': 'Cologne',...}

字典中只有26对transdict,但是numpy数组中有数百个字母我必须翻译。

最有效的方法是什么?

我考虑过使用,numpy.core.defchararray.replace(a, old, new, count=None)[source]但这会返回ValueError,因为numpy数组的大小与字典键/值的大小不同。

AttributeError: 'numpy.ndarray' object has no attribute 'translate'


问题答案:

这样可以吗 有时,纯Python是处理此类问题的一种好方法。下面将构建翻译列表(轻松转换回numpy数组)和合并的输出。

import numpy as np
abc_array = np.array(['B', 'D', 'A', 'F', 'H', 'I', 'Z', 'J'])

transdict = {'A': 'Adelaide',
             'B': 'Bombay',
             'C': 'Cologne',
             'D': 'Dresden',
             'E': 'Erlangen',
             'F': 'Formosa',
             'G': 'Gdansk',
             'H': 'Hague',
             'I': 'Inchon',
             'J': 'Jakarta',
             'Z': 'Zambia'
}

phoenetic = [transdict[letter] for letter in abc_array]
print ' '.join(phoenetic)

输出是:

Bombay Dresden Adelaide Formosa Hague Inchon Zambia Jakarta