为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕慕森 2021-11-16 15:15:45
我有2张桌子。一个所有者可以没有或多个项目。Itemid  name    owner_id (fk) 1   alpha   12   beta    1Ownerid   name     attrc 1   owner1    complex_attr12   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,以减少循环次数?
查看完整描述

2 回答

?
元芳怎么了

TA贡献1798条经验 获得超7个赞

这不是最有效的解决方案,但它与您现有的代码最相似:


for owner in owner_list:

    if any(item.owner_id == owner.id for item in item_list):

        owner.attrc = modify_funct(attrc)


查看完整回答
反对 回复 2021-11-16
?
跃然一笑

TA贡献1826条经验 获得超6个赞

使用集合推导更有效的解决方案:


owner_ids = {item.owner_id for item in item_list}

for owner in owner_list:

    if owner.id in owner_ids:

        owner.attrc = modify_funct(attrc)


查看完整回答
反对 回复 2021-11-16
  • 2 回答
  • 0 关注
  • 139 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信