import re
re_cat = re.compile("\[category\] (.*):")
categories = {}
category = None
for line in open("movies.txt", "r").read().split("\n"):
line = line.strip()
if not line:
continue
if re_cat.match(line):
category = re_cat.sub("\\1", line)
if not category in categories:
categories[category] = []
continue
categories[category].append(line)
print categories
Makes le dictionnaire suivant:
{
'Action': ['Movie', 'Movie'],
'Horror': ['Movie', 'Movie', 'Movie'],
'Comedy': ['Movie']
}
Nous utilisons la même expression régulière pour faire correspondre et supprimer le nom de la catégorie, il est donc efficace de le compiler avec re.compile
.
Nous avons une variable category
en cours d'exécution qui change chaque fois qu'une nouvelle catégorie est analysée. Toute ligne qui ne définit pas une nouvelle catégorie est ajoutée au dictionnaire categories
sous la clé appropriée. Les catégories définies pour la première fois créent une liste sous la bonne clé de dictionnaire, mais les catégories peuvent également être listées plusieurs fois et tout finira sous la bonne clé.
Tous les films répertoriés avant la définition d'une catégorie seront placés dans le dictionnaire sous la clé None
.
Pouvez-vous re-marquer l'exemple de fichier texte en tant que "code" monospace? Les listes numérotées rendent difficile de voir quelle est la séquence exacte des caractères. –
@Renzor - Veuillez fournir un exemple de code court pour savoir comment appeler cette fonction et ce que vous attendez en retour, par ex. 'myFavorite (Horror) renvoie [Movie, Movie, Movie]' – Theodor