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

遍历字典列表报错: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 12:35:24