如何用字典值替换列表/数组中的元素?

时间:2019-05-27 20:13:59

标签: python arrays list

我有以下代码:

# dict for replacements
replacements = {'*': 0, ' ': 1, 'A': 2, 'B': 3}
# open and read file
file = open(file, "r")
lines = file.readlines()
file.close()
# row and col count
rows = len(lines)
cols = len(lines[0]) - 1
# create array
maze_array = np.zeros((rows, cols), dtype=str)
# add lines to array
for index, line in enumerate(lines):
    for i in range(0, len(line) - 1):
        maze_array[index][i] = line[i]
return maze_array

这将打开一个文件,其内容仅为“ *”,“”,“ A”或“ B”。我从该文件中读取行,并获得行数和列数。然后创建一个伪数组,在其中添加行以获取以下输出:

[['*' ' ' '*' ... '*' ' ' '*']
['*' ' ' '*' ... ' ' 'B' '*']
['*' '*' '*' ... '*' '*' '*']]

当我打印出上面的可变行时,得到以下输出:

['*****************************************************************\n', '...']

现在我的目标是用字典中的值(0、1、2或3)替换'*','','A'或'B'。我该如何达到目标?

2 个答案:

答案 0 :(得分:2)

您可以使用list comprehension。下面是一个示例

lst = [['*', ' ', '*', '*', ' ', '*'],
       ['*', ' ', '*', ' ', 'B', '*'],
       ['*', '*', '*','*', '*', '*']]

replacements = {'*': 0, ' ': 1, 'A': 2, 'B': 3}

new_lst = [[replacements[i] for i in sublst] for sublst in lst]
# [[0, 1, 0, 0, 1, 0], [0, 1, 0, 1, 3, 0], [0, 0, 0, 0, 0, 0]]

答案 1 :(得分:1)

将字符分配给数组时,尝试获取相应的替换值:

for index, line in enumerate(lines):
    for i in range(0, len(line) - 1):
        maze_array[index][i] = replacements.get(line[i], line[i])

dict.get与默认值一起用作字符本身,因此,如果遇到无替换字符,则程序将继续正常运行。