2016-02-19 71 views
-1

我需要檢查similar結果的ID是否存在於exact結果中,然後排除該結果,但我只是不確定最佳方式這樣做。同時遍歷兩個列表並刪除其中一個if if exists in other

我想我必須找到一種方法來遍歷這兩個列表,然後嘗試像if similar.ID != exact.ID之類的東西,並將其傳遞給一個變量傳遞給Jinja2模板。

查詢正在用SQL-Alchemy完成,就像這樣;

exact_assets = Motor.query.filter_by(**filter_data).all() 
similar_assets = Motor.query.filter_by(**similar_filter_data).all() 

# Something like 

# for similar_asset, exact_asset in similar_assets, exact_assets: 
#  if similiar_asset.id == asset.id: 
#  similar_asset.pop(id) 

我知道,語法是不正確的,甚至有一個列表或字典(?)的功能,但希望它能夠表達什麼,我想在這裏實現。

+3

如果沒有相關的代碼,我們不能調試任何東西。將您的代碼放在[MCVE](http://stackoverflow.com/help/mcve)中並將其發佈到此處。 – skrrgwasme

+2

你可以從所有樣板中分離出你的實際問題嗎?當我讀到標題時,我想「我知道如何做到這一點」。但現在我甚至不知道問題是什麼。 – timgeb

+0

@timgeb對不起,這應該好多了。 – xGlorify

回答

1

首先創建鍵的清單,比較(假設平等意味着從您的代碼相同的ID)

exact_assets_ids = [item.id for item in exact_assets] 

然後篩選類似資產

final_assets = [item for item in similar_assets if item.id in exact_assets_ids] 

更新:只注意到它是交集:):

final_set = list(set(similar_assets) or set(exact_assets)) 

但在這種情況下,你應該實現Motor.__eq__

+0

這正是我期待的!謝謝!我只是通過添加'Not in'而不是'in'來改變它以從exact_assets_ids中排除item.id。 – xGlorify