遍历字典列表报错:ValueError: not enough values to unpack (expected 2, got 1)
问题描述
有如下格式的字典列表:
zip_values = [{'Spain': '43004'}, {'Spain': '43830'}, {'Spain': '46003'}, {'Spain': '50006'}, {'Portugal': ''}, {'Portugal': '1000-155'}, {'Portugal': '1000-226'}, {'Portugal': '1050-175'}, {'Portugal': '1050-190'}, {'Portugal': '1070-041'}, {'Portugal': '1150-101'}, {'Portugal': '1150-260'}, {'Portugal': '1200-114'}, {'Portugal': '1250-192'}, {'Portugal': '1300-243'}, {'Portugal': '1300-610'}, {'Portugal': '1350-100'}, {'Portugal': '1400-140'}, {'Portugal': '1400-212'}, {'Portugal': '1400-352'}, {'Portugal': '1495-057'}, {'Portugal': '1495-135'}, {'Portugal': '1500-073'}, {'Portugal': '1500-151'}, {'Portugal': '1500-506'}, {'Portugal': '1600-161'}, {'Portugal': '1600-864'}, {'Portugal': '1700-093'}, {'Portugal': '1700-163'}, {'Portugal': '1700-239'}, {'Portugal': '1750-249'}, {'Portugal': '1750-429'}, {'Portugal': '1800-297'}, {'Portugal': '1950-130'}, {'Portugal': '1990-179'}]
尝试通过以下代码遍历该列表时,出现错误 ValueError: not enough values to unpack (expected 2, got 1):
for key, value in zip_values: if key == "France" | key == "Germany" | key == "Spain": current_zip = check_if_zipcodes_correct(value, 1000, 99999, 5)
其中check_if_zipcodes_correct是自定义的邮编校验函数。
解决方法
1. 修复字典遍历的解包问题
zip_values中的每个元素是仅包含一个键值对的字典,直接用for key, value in zip_values会把字典本身当成可迭代对象,默认只迭代它的键,所以每次只能拿到1个值,导致解包失败。
正确的做法是遍历每个字典,再取出它的键值对:
- 方式一:用
dict.items()获取键值对,再解包
for item in zip_values: # 因为每个item只有一个键值对,直接解包items()的结果 key, value = next(iter(item.items())) # 后续逻辑...
- 方式二:直接取字典的唯一键和对应值
for item in zip_values: key = next(iter(item.keys())) value = item[key] # 后续逻辑...
2. 修复逻辑判断的运算符错误
原代码中用了位运算符|,这会导致逻辑判断出错,应该用**逻辑或运算符or**来连接多个条件:
if key == "France" or key == "Germany" or key == "Spain":
或者更简洁的写法:
if key in {"France", "Germany", "Spain"}:
修正后的完整代码
zip_values = [{'Spain': '43004'}, {'Spain': '43830'}, ...] # 你的完整列表 for item in zip_values: key, value = next(iter(item.items())) if key in {"France", "Germany", "Spain"}: current_zip = check_if_zipcodes_correct(value, 1000, 99999, 5)
内容的提问来源于stack exchange,提问作者saba tananashvili
相关产品推荐
相关产品推荐

