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

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变量后问题仍未解决。


错误分析与修正

  1. 错误原因:

    • 代码中if length in lengths.values() > 1存在两个问题:一是length变量从未定义过,二是逻辑表达式写法错误,in和>不能这样组合使用。
    • 额外创建的lengths字典完全没必要,遍历字典时直接获取当前places列表的长度即可。
  2. 修正后的代码:

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()}")
  1. 代码说明:
    • 去掉了多余的lengths字典,在循环内部用len(places)直接获取当前用户的收藏地点数量。
    • 用place_count变量存储长度,让条件判断更清晰,避免重复计算。
    • 条件判断直接比较place_count > 1,逻辑简单明了,符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 10:50:32