Python字典遍历:基于值列表长度输出对应语句的问题求助
问题:Python遍历字典时根据列表长度输出对应语句
我尝试在Python中结合for循环与if/else语句,遍历字典的键值对,根据值(列表)的元素数量输出对应语句。
原代码
favoritePlaces = { 'tom': ['alaska', 'wales', 'italy',], 'rory': ['hawaii',], 'frank': ['greenland', 'south africa',], } lengths = {key:len(value) for key,value in favoritePlaces.items()} print(lengths.values()) for person, places in favoritePlaces.items(): if length in lengths.values() > 1: print(f"\n{person.title()}'s favorite places are:") for place in places: print(f"\t- {place.title()}") else: print(f"\n{person.title()}'s favorite place is:") for place in places: print(f"\t- {place.title()}")
期望输出
Tom's favorite places are: - Alaska - Wales - Italy Rory's favorite place is: - Hawaii Frank's favorite places are: - Greenland - South Africa
遇到的问题
无论怎么调整循环和条件语句的结构,都会出现“length未定义”的错误。添加了lengths变量后问题仍未解决。
错误分析与修正
错误原因:
- 代码中
if length in lengths.values() > 1存在两个问题:一是length变量从未定义过,二是逻辑表达式写法错误,in和>不能这样组合使用。 - 额外创建的
lengths字典完全没必要,遍历字典时直接获取当前places列表的长度即可。
- 代码中
修正后的代码:
favoritePlaces = { 'tom': ['alaska', 'wales', 'italy'], 'rory': ['hawaii'], 'frank': ['greenland', 'south africa'], } for person, places in favoritePlaces.items(): # 直接获取当前列表的长度 place_count = len(places) if place_count > 1: print(f"\n{person.title()}'s favorite places are:") else: print(f"\n{person.title()}'s favorite place is:") # 遍历输出每个地点 for place in places: print(f"\t- {place.title()}")
- 代码说明:
- 去掉了多余的
lengths字典,在循环内部用len(places)直接获取当前用户的收藏地点数量。 - 用
place_count变量存储长度,让条件判断更清晰,避免重复计算。 - 条件判断直接比较
place_count > 1,逻辑简单明了,符合需求。
- 去掉了多余的
内容的提问来源于stack exchange,提问作者Tleslie99
相关产品推荐
相关产品推荐

