如何在Python中遍历嵌套字典并自动赋值变量?
可行的解决方案
你的需求完全可以实现,先纠正下现有代码的问题:内层for循环会抛出ValueError,因为people[person].values()返回的是单个包含三个元素的序列,而非可迭代的三元组集合,直接用多变量遍历会报错。
下面是几种简洁的实现方式:
方法1:直接解包字典值(依赖键的顺序)
如果能保证每个嵌套字典的键顺序始终是name、age、occupation,可以直接解包values()返回的序列:
people = { 1: {"name": "Simon", "age": 20, "occupation": "Data scientist"}, 2: {"name": "Kate", "age": 30, "occupation": "Software engineer"}, 3: {"name": "George", "age": 22, "occupation": "Manager"}, } for person_data in people.values(): name, age, occupation = person_data.values() print(name, age, occupation)
注意:Python 3.7+字典会保留插入顺序,但如果后续嵌套字典的键顺序改变,解包结果会出错,适合固定结构的简单场景。
方法2:按键取值(不依赖顺序,更稳妥)
直接通过键提取对应值,完全避免顺序问题,代码可读性也更高:
for person_data in people.values(): name = person_data["name"] age = person_data["age"] occupation = person_data["occupation"] print(name, age, occupation)
也可以写成一行解包的简洁形式:
for person_data in people.values(): name, age, occupation = person_data["name"], person_data["age"], person_data["occupation"] print(name, age, occupation)
方法3:用数据类结构化处理(适合复杂场景)
如果需要频繁使用这些变量,或者后续有扩展需求,可以用dataclass将字典转为结构化对象:
from dataclasses import dataclass @dataclass class Person: name: str age: int occupation: str people = { 1: {"name": "Simon", "age": 20, "occupation": "Data scientist"}, 2: {"name": "Kate", "age": 30, "occupation": "Software engineer"}, 3: {"name": "George", "age": 22, "occupation": "Manager"}, } for person_data in people.values(): person = Person(**person_data) print(person.name, person.age, person.occupation)
这种方式不仅自动完成变量赋值,还能获得类型提示和结构化的对象操作能力,适合中大型项目。
内容的提问来源于stack exchange,提问作者RishV
相关产品推荐
相关产品推荐

