您早期代码中的问题是古老的Iterating on the list while modifying it,它导致了异常。
当您执行list_in[number] = new_value 时,您正在内部循环中修改list_in,同时在它上面进行迭代,这会导致new_value 在下一个循环中变为A,这不是letters 中的有效键,因此您会收到错误KeyError: 'A'
我建议使用列表推导来实现您想要的,这会在迭代旧列表的同时创建一个新列表,这是我们希望发生的事情
letters = {"1": "A"}
X = [[1, 1, 1],[1, 1, 1]]
res = [[letters[str(item)] for item in li] for li in X ]
print(res)
#[['A', 'A', 'A'], ['A', 'A', 'A']]
请注意,内部 for 循环也可以使用 map 以另一种方式编写
letters = {"1": "A"}
X = [[1, 1, 1],[1, 1, 1]]
res = [list(map(lambda x:letters[str(x)], li)) for li in X ]
print(res)
注意,这相当于下面的传统双 for 循环,可能更容易理解
letters = {"1": "A"}
X = [[1, 1, 1],[1, 1, 1]]
res = []
#Iterate over outer list
for li in X:
l = []
#Iterate over inner list and append A for inner list
for item in li:
l.append(letters[str(item)])
#Append this list to a bigger list
res.append(l)
print(res)
作为附录,可以使用enumerateenumerate 使用索引来更改值而不是替换项目来使原始代码工作
letters = {"1": "A"}
X = [[1, 1, 1],[1, 1, 1]]
#Iterate over the lists
for i, li in enumerate(X):
for j, item in enumerate(li):
#Replace value at index i,j with A
X[i][j] = letters[str(item)]
print(X)