如何将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
相关产品推荐
相关产品推荐

