如何用列表推导式替代嵌套循环实例化ReponseGroupInstance对象
如何用列表推导式基于嵌套字典实例化类并获取外层字典Key作为属性值?
问题背景
现有如下类定义:
class ReponseGroupInstance: def __init__(self, id, questions, parentId): self.id = id self.questions = questions self.parentId = parentId
需要基于嵌套字典formInstances['responses']实例化该类对象,核心要求是ReponseGroupInstance.parentId对应外层字典的Key,而非内层字典中的数据。
已通过嵌套for循环结合工厂函数实现需求,但尝试用列表推导式时,因外层parentId列表与内层键值对列表长度不匹配,使用zip方法失败,希望用列表推导式替代嵌套循环完成实例化。
假设formInstances['responses']的结构示例如下:
formInstances = { 'responses': { 'parent_001': { 'group_001': ['question1', 'question2'], 'group_002': ['question3'] }, 'parent_002': { 'group_003': ['question4', 'question5', 'question6'] } } }
解决方案
直接使用嵌套列表推导式即可,逻辑与嵌套for循环完全一致,无需使用zip:
response_group_instances = [ ReponseGroupInstance(group_id, questions, parent_id) for parent_id, groups in formInstances['responses'].items() for group_id, questions in groups.items() ]
说明
这个列表推导式的执行顺序和以下嵌套循环完全相同:
response_group_instances = [] for parent_id, groups in formInstances['responses'].items(): for group_id, questions in groups.items(): response_group_instances.append(ReponseGroupInstance(group_id, questions, parent_id))
外层循环遍历外层字典的键值对(parent_id为外层Key),内层循环遍历每个外层值对应的内层字典,每次实例化时将外层的parent_id传入构造函数,完美匹配需求。
内容的提问来源于stack exchange,提问作者Clay Campbell
相关产品推荐
相关产品推荐

