Python字典迭代后值丢失问题:为何前序键值每次迭代被清空?
ICAO词汇字典构建函数异常原因分析
问题描述
编写的Python函数意图让用户为每个英文字母自定义ICAO词汇,按回车则使用预存的默认值,但运行后得到空字典,且切换新键时前一个键的数值被删除。函数代码如下:
def buildCodeDict(): auto_dict = {"A": "Alpha", "B": "Bravo", "C": "Charlie", "D": "Delta", "E": "Echo", "F": 'Foxtrot', "G": "Golf", "H": "Hotel", "I": "India", "J": "Juliet", "K": "Kilo", "L": "Lima", "M": "Mike", "N": "November", "O": "Oscar", "P": "Papa", "Q": "Quebec", "R": "Romeo", "S": "Sierra", "T": "Tango", "U": "Uniform", "V": "Victor", "W": "Whiskey", "X": "X-ray", "Y": "Yankee", "Z": "Zulu"} input_dict = {"A": str, "B": str, "C": str, "D": str, "E": str, "F": str, "G": str, "H": str, "I": str, "J": str, "K": str, "L": str, "M": str, "N": str, "O": str, "P": str, "Q": str, "R": str, "S": str, "T": str, "U": str, "V": str, "W": str, "X": str, "Y": str, "Z": str} print("Please enter your preferred ICAO word for each letter of the English alphabet (or ENTER for auo-entry):") for key in auto_dict: keyword = input(str(key) + ": ") if keyword == "": print(str(auto_dict[key])) auto_dict[str(key)] = auto_dict[key] # uses a word from auto_dict if the user selects ENTER instead of a custom word print("Input dict: ", auto_dict) auto_dict[key] = keyword return auto_dict
异常原因
- 逻辑顺序错误:无论用户输入是否为空,循环最后都会执行
auto_dict[key] = keyword。当用户按回车时,keyword是空字符串,这会把之前保留的默认值直接覆盖为空,导致最终字典全是空值。 - 冗余操作与无效代码:
input_dict字典全程未被使用,属于冗余定义;auto_dict[str(key)] = auto_dict[key]这行代码是无效的,等于把键对应的值赋值给自己,没有实际作用。 - 遍历过程中修改字典的潜在风险:虽然这里遍历的是初始字典的键集合,但修改字典值的操作本身没问题,核心问题还是逻辑顺序错误。
修正后的代码
def buildCodeDict(): auto_dict = {"A": "Alpha", "B": "Bravo", "C": "Charlie", "D": "Delta", "E": "Echo", "F": 'Foxtrot', "G": "Golf", "H": "Hotel", "I": "India", "J": "Juliet", "K": "Kilo", "L": "Lima", "M": "Mike", "N": "November", "O": "Oscar", "P": "Papa", "Q": "Quebec", "R": "Romeo", "S": "Sierra", "T": "Tango", "U": "Uniform", "V": "Victor", "W": "Whiskey", "X": "X-ray", "Y": "Yankee", "Z": "Zulu"} print("Please enter your preferred ICAO word for each letter of the English alphabet (or ENTER for auto-entry):") for key in auto_dict: keyword = input(f"{key}: ") # 仅当用户输入非空时才替换默认值 if keyword: auto_dict[key] = keyword # 输入为空则保留原默认值,无需额外操作 print(f"Current dict: {auto_dict}") return auto_dict
内容的提问来源于stack exchange,提问作者Jeremy Kievit
相关产品推荐
相关产品推荐

