J'ai une question fondamentale sur la compréhension. Il y a la liste des dicts où les valeurs sont des listes, il ressemble à ceci:liste de traitement des dictionnaires - lisibilité et la complexité
listionary = [{'path': ['/tmp/folder/cat/number/letter', '/tmp/folder/hog/char/number/letter', '/tmp/folder/hog/number/letter', '/etc'],
'mask': True,
'name': 'dict-1'},
{'path': ['/tmp/folder/dog/number-2/letter-4', '/tmp/folder/hog-00/char/number-1/letter-5', '/tmp/folder/cow/number-2/letter-3'],
'mask': True,
'name': 'dict-2'},
{'path': ['/tmp/folder/dog_111/number/letter', '/tmp/folder/ant/char/number/letter', '/tmp/folder/hen/number/letter'],
'mask': True,
'name': 'dict-3'}]
Ce que je dois est d'obtenir des valeurs de type liste chaque animal unique. Animal est toujours compris entre tmp/folder/ et / suivant. Ce que je l'ai fait:
import re
flat_list = [item for sublist in [i['path'] for i in listionary] for item in sublist]
animals = list(set([re.search('folder/([a-z]+)', elem).group(1) for elem in flat_list if 'tmp' in elem]))
Il peut aussi être compressée en une seule ligne, mais il est assez compliqué et illisible:
animals = list(set([re.search('folder/([a-z]+)', elem).group(1) for elem in [item for sublist in [i['path'] for i in listionary] for item in sublist] if 'tmp' in elem]))
est-il une règle d'or (par exemple zen de python) sur la taille de compréhension? Comment puis-je le rendre meilleur? Merci d'avance.
I, pour un, ne suis pas amoureux de * one-liners *, parfois ils ont du sens, parfois ils ne le font pas.La lisibilité devrait être une considération. Le comprendrez-vous demain? – wwii
Veuillez prendre le temps de lire [demander]. – wwii
Les compréhensions sont sujettes aux mêmes lignes directrices pour les colonnes 79 ou 119 (selon les préférences), et je chercherais à les décomposer si vous commencez à les dépasser. – Aaron