我有一个字典dic
与这个键和值对:(注意:这个dic
是双射(即:一对一映射)
dic = {
0: 0,
30: 1,
35: 2,
42: 3,
53: 4,
54: 5,
55: 6,
81: 7,
83: 8,
95: 9,
99: 10
}
在我的源代码中,有一个列表L
,它是从一个特定的计算生成的。L
中的值实际上与dic
的值相关联。因此,基于dic
,我想要这个L
列表:
L = [0, 0, 7, 2, 2, 1, 9]
转换为键dic
中的值。这是期望的输出out
:
out = [0, 0, 81, 35, 35, 30, 95]
我可以使用什么样的列表推导来获得期望的输出?
您可以从原始字典创建反向字典,并使用它来获得所需的结果,如:
dic = {0: 0,
30: 1,
35: 2,
42: 3,
53: 4,
54: 5,
55: 6,
81: 7,
83: 8,
95: 9,
99: 10}
invertedDic = {v:k for k, v in dic.items()}
L = [0, 0, 7, 2, 2, 1, 9]
res = [invertedDic[elt] for elt in L]
print(res)
输出:
[0, 0, 81, 35, 35, 30, 95]
同样,不建议使用dict
这样的关键字作为对象名。
还有另一种解决方案,它不需要生成值和键交换的中间字典。它只是一步完成了@Krishna Chaurasia提出的解决方案。限制是相同的,特别是您必须确保dic
在其他地方是双目标的。
dic = {
0: 0,
30: 1,
35: 2,
42: 3,
53: 4,
54: 5,
55: 6,
81: 7,
83: 8,
95: 9,
99: 10
}
L = [0, 0, 7, 2, 2, 1, 9]
out = [k for el in L for k,v in dic.items() if el==v]
print(out)
# [0, 0, 81, 35, 35, 30, 95]