使用zip()循环提取字典项时解包报错:预期4个值却得到3个
问题原因及解决方法
你这段代码的问题出在zip()的参数和变量解包的匹配上:
zip(actual, pred, dict.items())会把三个可迭代对象打包,每次迭代返回一个包含3个元素的元组:第一个来自actual,第二个来自pred,第三个是dict.items()返回的**(key, val)元组**。- 但你试图把这个3元素元组直接解包成4个变量(
actual,pred,key,val),自然会报“值不足”的错误。
解决方法一:嵌套解包第三个元素
直接对dict.items()返回的元组做嵌套解包,就能拿到4个变量:
for actual_val, pred_val, (key, val) in zip(actual, pred, dict.items()): # 这里正常使用actual_val、pred_val、key、val即可
解决方法二:拆分字典的键和值再传入zip
先把字典的键和值分别提取成独立的可迭代对象,再一起传给zip(),这样就能直接解包成4个变量:
# 注意:别用dict当变量名,会覆盖Python内置的dict类型 keys = list(my_dict.keys()) vals = list(my_dict.values()) for actual_val, pred_val, key, val in zip(actual, pred, keys, vals): # 业务逻辑代码
内容的提问来源于stack exchange,提问作者Sherwin R
相关产品推荐
相关产品推荐

