Erstellen Sie eine temporäre dict Werte zu halten. Erstellen Sie dann eine Funktion, die diese dict als Cache verwendet, und verwenden Sie diese Funktion in der Liste Verständnis, etwa so:
obj_cache = {}
def cache_get (target, key):
if (target, key) not in obj_cache: obj_cache[(target, key)] = target.get(key)
return obj_cache[(target, key)]
resources = [cache_get(obj, "file") for obj in iterator if cache_get(obj, "file") != None]
Auch Sie wahrscheinlich bereits wissen (und wenn ja, ignorieren Sie bitte diese Antwort), aber wenn obj.get ("file") einen Datenbankaufruf macht, eine Datei öffnet, eine Anfrage über ein Netzwerk macht oder etwas anderes, was möglicherweise teuer ist, tut, ist es wahrscheinlich harmlos, es zweimal pro Iteration anstelle von einmal aufzurufen Fügen Sie nur O (n) zu Ihren Kosten hinzu.
Danke, das ist die allgemeine Lösung, nach der ich gesucht habe. – Kai