2012-02-01 57 views
14

我需要將數據庫行對象列表加載到內存中,然後通過其唯一標識符獲取其中一行。有沒有一種乾淨的pythonic方法通過屬性值從列表中找到單個對象?或者我只是循環和比較?在Python中按屬性獲取列表項

+2

有什麼理由不直接與數據庫查詢這樣做呢? – Avaris 2012-02-01 00:45:38

+0

這只是一個例子 – Yarin 2012-04-13 15:33:47

回答

11

是的,你循環和比較:

items = [item for item in container if item.attribute == value] 

而且你回來,可進行測試,看看你有多少發現了一個清單。

如果你會做這個有很多,可以考慮使用字典,其中關鍵是你感興趣的屬性。

4

您可以filter

matches = filter(lambda obj: obj.attribute == "target value", myListOfObjects) 

參考kindall的回答諮詢效率。如果你這樣做了很多,這是不正確的。

+0

什麼纔是有效的方法?謝謝。 – moeseth 2016-04-12 19:28:47

12

如果你做到這一點只給出了第一個比賽,而不是比較整個列表:find first sequence item that matches a criterion

如果你做這樣的事,你不必捕獲異常,但得到None代替:

item = next((i for i in items if i == 'value'), None)