如何用解包语法在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
相关产品推荐
相关产品推荐

