Python 列表理解中的反向字典查找

Python reverse dictionary lookup in list comprehension

我有以下词典:

d = {}
d[1] = 'a'
d[2] = 'b'
d[3] = 'c'
d[4] = 'd'

我想对字符串中的每个字符执行反向字典查找:

input_string = "bad"

当我在列表推导式而不是嵌套 for 循环中执行此操作时,我得到了不同的结果,我不明白为什么。据我了解,列表理解和嵌套 for 循环应该产生相同的结果。列表理解产生一个列表,其结果与我期望的顺序不同。我在这里想要的结果是由嵌套的 for 循环提供的结果,但是我更喜欢使用列表理解来完成它。也许这与我不知道的 python 字典顺序有关?

result1 = [key for key, value in d.items() for i in input_string if i == value]
print(result1)


> [1, 2, 4]


result2 = list()
for i in input_string:
    for key, value in d.items():
        if i == value:
            result2.append(key)

print(result2)

> [2, 1, 4]

为了模仿传统的循环,外层循环应该结束input_string,内层循环应该结束d在列表推导中:

out = [k for i in input_string for k,v in d.items() if i==v]

输出:

[2, 1, 4]