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

如何将Lambda函数返回值作为字典值?解决遍历字典的ValueError问题

解决字典遍历的ValueError问题

你的报错和代码里的冒号没关系,问题出在遍历字典的方式上:

当你直接写for k, v in timezones:时,Python默认只会遍历字典的键(比如这里的'GMT'),每次循环拿到的是单个字符串,你却试图把它解包成k和v两个变量,自然会抛出too many values to unpack的错误。

修正方法

1. 修复遍历代码

要遍历字典的键值对,必须用dict.items()方法,它会返回每个键值组成的元组,才能正确解包成k和v:

from datetime import datetime
import pytz

timezones = {
    'GMT': lambda t: datetime.now(pytz.timezone(t)).strftime("%Y-%m-%d - %H:%M:%S")
}

# 使用items()遍历键值对
for k, v in timezones.items():
    print(v(k))

2. 直接生成目标字典

既然你的需求是得到「时区为键、当前时间为值」的字典,没必要先定义lambda再遍历,用字典推导式更简洁:

from datetime import datetime
import pytz

# 列出你需要的时区
target_timezones = ['GMT', 'Asia/Shanghai', 'Europe/London']

# 一键生成目标字典
current_time_dict = {
    tz: datetime.now(pytz.timezone(tz)).strftime("%Y-%m-%d - %H:%M:%S")
    for tz in target_timezones
}

print(current_time_dict)
# 输出示例: {'GMT': '2024-05-20 - 12:30:00', 'Asia/Shanghai': '2024-05-20 - 20:30:00', ...}

如果一定要保留原有的lambda结构,也可以用推导式基于原字典生成结果:

timezone_funcs = {
    'GMT': lambda t: datetime.now(pytz.timezone(t)).strftime("%Y-%m-%d - %H:%M:%S"),
    'Asia/Shanghai': lambda t: datetime.now(pytz.timezone(t)).strftime("%Y-%m-%d - %H:%M:%S")
}

current_time_dict = {k: v(k) for k, v in timezone_funcs.items()}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 18:01:05