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]
我有以下词典:
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]