代码之家  ›  专栏  ›  技术社区  ›  user3541631

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

  •  0
  • user3541631  · 技术社区  · 5 年前

    我有两张桌子。一个所有者可以有一个或多个项。

    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 项目 . 在循环中,我使 所有者 对象;我需要修改 原始数据库属性

    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”,然后循环item_list和owner_list,以减少循环?

    2 回复  |  直到 5 年前
        1
  •  1
  •   Alex Hall    5 年前

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

    for owner in owner_list:
        if any(item.owner_id == owner.id for item in item_list):
            owner.attrc = modify_funct(attrc)
    
        2
  •  0
  •   Alex Hall    5 年前

    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)