You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

遍历字符串匹配to_nato字典值返回空列表,求问题原因

问题描述

我有一个名为to_nato的字典,定义如下:

to_nato = {'a': 'alfa',
           'b': 'bravo',
           'c': 'charlie',
           'd': 'delta',
           'e': 'echo',
           'f': 'foxtrot',
           'g': 'golf',
           'h': 'hotel',
           'i': 'india'}

我需要遍历字符串"stateofny",如果每个字符存在于该字典中,就将对应的值追加到syr_list末尾。

我尝试了以下代码:

syr_str="stateofny"
syr_list=[]

for letter in syr_str:
    for key, value in zip(to_nato.keys(), to_nato.values()):
                if letter == key:
                   syr_list.append(value) 
print(syr_list)

但代码返回空列表,请问我哪里出错了?


问题分析与解决

核心错误点

你的代码存在两个关键问题:

  1. 冗余的嵌套循环:字典的核心特性就是通过键直接取值,完全不需要遍历所有键值对去匹配字符,这种写法属于绕远路,还容易引入逻辑错误。
  2. 缩进逻辑隐患:你的if语句缩进过度,虽然语法上合法,但如果实际运行时缩进层级出错(比如if脱离了内层循环),会导致只有字典最后一组键值对参与匹配,而你的字符串里没有i,自然返回空列表。

正确写法(两种方式)

方式一:直接判断键是否存在

这是最直观的写法,先检查字符是否在字典的键集合中,存在就直接取值追加:

syr_str = "stateofny"
syr_list = []
to_nato = {'a': 'alfa',
           'b': 'bravo',
           'c': 'charlie',
           'd': 'delta',
           'e': 'echo',
           'f': 'foxtrot',
           'g': 'golf',
           'h': 'hotel',
           'i': 'india'}

for letter in syr_str:
    if letter in to_nato:
        syr_list.append(to_nato[letter])

print(syr_list)  # 输出:['alfa', 'echo', 'foxtrot']

方式二:使用get方法更简洁

get方法可以避免KeyError,如果字符不存在于字典中会返回None,我们只需过滤掉None即可:

syr_str = "stateofny"
syr_list = []
to_nato = {'a': 'alfa',
           'b': 'bravo',
           'c': 'charlie',
           'd': 'delta',
           'e': 'echo',
           'f': 'foxtrot',
           'g': 'golf',
           'h': 'hotel',
           'i': 'india'}

for letter in syr_str:
    val = to_nato.get(letter)
    if val:
        syr_list.append(val)

print(syr_list)  # 输出:['alfa', 'echo', 'foxtrot']

内容的提问来源于stack exchange,提问作者Anano Mikadze

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 03:40:21