我创建了一个具有以下布局的路线列表:
routes = [[14,133,101,40,55,149,41,165,45,182,220,104,110,100,117,126,205,64,194,118,203],
[7, 145, 111, 7, 180, 168, 136, 33, 70, 222, 190, 83, 233, 103],
[185, 124, 185, 82, 195],
[185, 91, 60, 8, 6],
[220, 43, 179, 214],
[7, 226, 187, 25, 152, 94, 46, 13, 19, 79, 125],
[104, 72, 89, 51, 2, 172],
[7, 147, 130, 160, 54, 116, 77, 156, 142, 78, 200, 122],
[7, 175, 138, 49, 96, 148, 88, 123, 207, 97, 112, 169],
[104, 201, 167, 53, 42, 15],
[7, 95, 34, 137, 36, 20, 56, 164, 129, 5, 16],
[3, 44, 71, 48, 102, 131, 139, 30, 221, 22, 57, 23, 66, 204, 99],
[220, 114, 150, 217],
[104, 170, 87, 174, 140, 134],
[7, 193, 86, 202, 59, 143, 108, 21, 155, 198],
[104, 162, 230, 166, 173],
[185, 177, 127, 208, 158],
[185, 227, 178, 176],
[220, 224, 98],
[185, 232, 37],
[185, 225]]
这些数字对应一个字典索引,如下所示:
{1: 4,
2: 38,
3: 71,
4: 90,
5: 94,
6: 101,
7: 142,
8: 163,
9: 164,
10: 196,
...
234: 8360,
235: 8507,
236: 8545}
我想遍历路由列表,用字典中的相应值替换每个数字,例如将路由中的 7 转换为 142。我尝试使用以下代码执行此操作:
([d.get(x,"No_key") for x in routes])
但这会产生以下错误:
TypeError: unhashable type: 'list'
当我改为这样做时,它似乎有效:
([d.get(x,"No_key") for x in routes[0]])
但我想要一种方法来为不确定长度的路由列表执行此操作,而不必逐行手动浏览列表
还有其他方法可以迭代并替换这些值吗?
答案 0 :(得分:2)
您有一个列表列表,而不是单个平面列表,因此您必须使用两个嵌套列表推导式:
routes = [
[
d.get(index, "No_key")
for index in route
]
for route in routes
]
答案 1 :(得分:1)
使用 2 个列表推导式:
routes = [[2, 3, 1], [6, 5, 4]]
dct = {1: 4,
2: 38,
3: 71,
4: 90,
5: 94,
6: 101,
}
routes = [[dct[k] for k in lst] for lst in routes]
print(routes)
# [[38, 71, 4], [101, 94, 90]]