Как заменить элементы в списке / массиве значениями словаря? - PullRequest
0 голосов
/ 27 мая 2019

У меня есть следующий код:

# 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', '...']

Теперь мойцель состоит в том, чтобы заменить '*', '', 'A' или 'B' значениями из словаря (0, 1, 2 или 3).Как я могу достичь своей цели?

Ответы [ 2 ]

2 голосов
/ 27 мая 2019

Вы можете использовать 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 голос
/ 27 мая 2019

При назначении символов в массив, попытайтесь получить соответствующее значение замены:

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 используется со значением по умолчанию в качестве самого символа, так что если символ, который не имеетПроизошла замена, программа продолжится в обычном режиме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...