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
Создает следующий словарь:
{
'Action': ['Movie', 'Movie'],
'Horror': ['Movie', 'Movie', 'Movie'],
'Comedy': ['Movie']
}
Мы используем одно и то же регулярное выражение для сопоставления и вычеркивания имени категории, поэтому эффективно скомпилировать его с re.compile
.
У нас есть переменная category
, которая изменяется при каждом анализе новой категории.Любая строка, которая не определяет новую категорию, добавляется в словарь categories
под соответствующим ключом.Категории, определенные впервые, создают список под правой клавишей словаря, но категории также могут быть перечислены несколько раз, и все будет заканчиваться правой клавишей.
Любые фильмы, перечисленные до определения категории, будут всловарь под ключом None
.