Créer un dict temporaire pour contenir des valeurs. Ensuite, créez une fonction qui utilise dict comme un cache, et utiliser cette fonction dans la compréhension de la liste, comme suit:
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]
En outre, vous savez probablement déjà (et si oui, s'il vous plaît ne pas tenir compte de cette réponse), mais à moins que obj.get ("file") ne fasse un appel de base de données, ouvre un fichier, effectue une requête sur un réseau, ou fasse quelque chose d'autre potentiellement coûteux, l'appeler deux fois par itération est probablement inoffensif. seulement en ajoutant O (n) à votre coût.
Merci, c'est la solution générale que je cherchais. – Kai