我有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)
跃然一笑
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)
添加回答
举报
0/150
提交
取消