仅在循环中第一次修改可能的重复元素

我有2张桌子。一个所有者可以没有或多个项目。


Item


id  name    owner_id (fk) 

1   alpha   1

2   beta    1



Owner


id   name     attrc 

1   owner1    complex_attr1

2   owner2    complex_attr2 

我从数据库中分别检索它们作为列表:


    for item in item_list:

        for owner in owner_list:

            if item.owner_id == owner.id:

              # I modify owner attributes    

              owner.attrc = modify_funct(attrc)

              item.owner = owner 

我名单Items中的HTML,并为每个Item我展示的一些属性Owner的Item。在循环中,我创建Owner了Item对象的a 属性;事情是在 html 中显示我需要修改一些Owner原始数据库属性


所以在 html 模板创建中,我会有类似的东西:


for item in item_list:

 <div>

   item.name

   <span> item.owner.name<span>

   <span> item.owner.attrc<span>

</div>

因为Owner with id 1拥有两者Item with id 1 and 2,在循环中的第一次迭代中,attrc被修改,在循环中的第二次迭代中,'attrc' 已经被修改,并且该函数没有找到预期的内容。


解决方案是使用另一个循环循环/更改外部的“attrc”,然后循环 item_list 和 owner_list,以减少循环次数?



慕慕森
浏览 140回答 2
2回答

元芳怎么了

这不是最有效的解决方案,但它与您现有的代码最相似:for owner in owner_list:&nbsp; &nbsp; if any(item.owner_id == owner.id for item in item_list):&nbsp; &nbsp; &nbsp; &nbsp; owner.attrc = modify_funct(attrc)

跃然一笑

使用集合推导更有效的解决方案:owner_ids = {item.owner_id for item in item_list}for owner in owner_list:&nbsp; &nbsp; if owner.id in owner_ids:&nbsp; &nbsp; &nbsp; &nbsp; owner.attrc = modify_funct(attrc)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python