Python:如何将列表中的值映射到相关的字典键

2024-06-28 19:06:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个字典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] 

我可以使用什么样的列表理解来实现所需的输出


Tags: 列表字典源代码out双射键值dic
2条回答

还有另一种解决方案,它不需要生成值和键切换的中间字典。它与@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]

您可以从原始字典创建反向字典,并使用该字典获得所需结果,如下所示:

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这样的关键字

相关问题 更多 >