遍历字符串匹配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)
但代码返回空列表,请问我哪里出错了?
问题分析与解决
核心错误点
你的代码存在两个关键问题:
- 冗余的嵌套循环:字典的核心特性就是通过键直接取值,完全不需要遍历所有键值对去匹配字符,这种写法属于绕远路,还容易引入逻辑错误。
- 缩进逻辑隐患:你的
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
相关产品推荐
相关产品推荐

