J'ai déjà vu des compréhensions de listes Python, mais cela peut-il être fait sur une seule ligne de Python?Comment cela peut-il être écrit sur une seule ligne?
errs = {}
for f in form:
if f.errors:
errs[f.auto_id] = f.errors
J'ai déjà vu des compréhensions de listes Python, mais cela peut-il être fait sur une seule ligne de Python?Comment cela peut-il être écrit sur une seule ligne?
errs = {}
for f in form:
if f.errors:
errs[f.auto_id] = f.errors
errs = dict((f.auto_id, f.errors) for f in form if f.errors)
Il pourrait probablement, mais selon les « comptes Lisibilité ». Règle (PEP 20), je dirais que c'est une mauvaise idée. :)
D'autre part, vous avez « Flat est mieux que imbriqué. » Et « Sparse est mieux que dense. », Donc je suppose que c'est une question de goût :)
Python 3.0 a dict compréhensions que une forme plus courte/plus lisible du Anser fourni par Steef:
errs = {f.auto_id: f.errors for f in form if f.errors}
les deux méthodes sont très lisibles, mais vous devriez penser à l'avenir mainteneurs du code. Parfois, explicite est mieux. Répertoriez les règles de compréhension bien que :)
Venant d'un arrière-plan Haskell, je préfère le plus court. Je suis d'accord avec vous que parfois la lisibilité vaut plus, mais dans ce cas particulier, mes yeux ont mal à voir quatre lignes pour une chose si simple. –
Je dirais que la version dict() de one-liner est plus lisible parce qu'elle est auto-documentée - elle montre clairement qu'elle crée une dict avec certaines paires clé-valeur. Le quatre lignes n'est pas mauvais, mais cela prend un peu plus de temps pour dire que c'est "juste créer un dict". –