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

如何用解包语法在for循环中仅提取嵌套字典的值?

如何解包字典提取指定键的对应值?

你的原代码直接用(v1, v2)解包内层字典会不符合预期(甚至报错,如果内层字典键数量不匹配的话),因为字典默认迭代的是键,而不是值。要提取内层字典中k1和k2对应的v1、v2,可以用以下几种方法:

方法1:直接通过键取值后解包

这是最直观的方式,明确指定要提取的键:

mydict = {
    "key": {
        "k1": "v1",
        "k2": "v2",
    }
}
for k, inner_dict in mydict.items():
    v1, v2 = inner_dict["k1"], inner_dict["k2"]
    # 这里可以直接使用v1和v2
    print(v1, v2)  # 输出: v1 v2

方法2:利用values()解包(依赖字典顺序)

如果你的Python版本是3.7及以上(字典默认保留插入顺序),且内层字典的键顺序固定是k1、k2,可以直接解包values()的结果:

for k, inner_dict in mydict.items():
    v1, v2 = inner_dict.values()
    print(v1, v2)  # 输出: v1 v2

⚠️ 注意:如果内层字典的键顺序可能变化,或者需要兼容3.7以下版本,不要用这种方法,会导致取值混乱。

方法3:用itemgetter批量提取键对应值

如果需要频繁提取固定的几个键,operator.itemgetter会更简洁高效:

from operator import itemgetter

mydict = {
    "key": {
        "k1": "v1",
        "k2": "v2",
    }
}
# 定义一个提取k1、k2的工具函数
get_vals = itemgetter("k1", "k2")
for k, inner_dict in mydict.items():
    v1, v2 = get_vals(inner_dict)
    print(v1, v2)  # 输出: v1 v2

为什么原代码不行?

原代码中for k, (v1, v2) in mydict.items()的写法,相当于把内层字典直接解包成键的迭代器,也就是v1, v2 = ("k1", "k2"),得到的是内层字典的键,而不是对应的值,这和你的需求不符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 10:30:50