列表推导中的Python反向字典查找



我有以下字典:

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]

最新更新