Python遍历喜爱语言字典时单语言场景无法正确打印结果问题
问题根因
- 变量作用域错误:
language变量仅在if分支的内层for循环中定义,进入else分支时不会重新赋值,只会复用之前循环迭代残留的旧值,无法匹配当前Sarah对应的C语言,是输出错误的直接原因,极端情况还会触发NameError报错。 - 判断逻辑缺陷:直接用
len(languages)判断会把字符串类型的取值当成可迭代对象计算字符长度,比如如果某用户的收藏语言是字符串"java",长度为4会误判为多语言,遍历输出每个字符,完全不符合预期。
修复方案
先判断取值的类型是否为列表,再根据列表长度判断是多语言还是单语言;如果不是列表,直接按单语言处理即可,修复后代码如下:
favorite_languages = { "jen": ["python", "ruby"], "sarah": "c", "edward": ["ruby", "go"], "phil": ["python", "haskell"], } for names, languages in favorite_languages.items(): # 优先判断是否为多语言列表 if isinstance(languages, list): if len(languages) > 1: print(f"\n{names.title()}'s favorite languages are:") for language in languages: print(f"\t{language.title()}") else: # 处理列表长度为1的单语言场景 print(f"\n{names.title()}'s favorite language is: {languages[0].title()} ") else: # 处理非列表的单语言场景 print(f"\n{names.title()}'s favorite language is: {languages.title()} ")
运行后即可输出Sarah's favorite language is: C 的预期结果。
内容的提问来源于stack exchange,提问作者Juz
相关产品推荐
相关产品推荐

