Ваш код отлично работает при получении данных, это просто то, как вы их анализируете.В диктовке .values()
возвращает представление значений, которые вы можете сохранить в списке, если хотите.В этом случае вы хотите значение самого словаря, который вы можете просто выбрать по ключу;child.attrib['category']
.Как только вы это получите, все, что вам нужно сделать, это обновить ваш диктат.Здесь мы будем использовать defaultdict
, который, когда ключ встречается в первый раз, возвращает пустой список, чтобы мы могли добавлять названия фильмов.
import xml.etree.ElementTree as ET
from collections import defaultdict
tree = ET.parse('movies.xml')
root = tree.getroot()
d = defaultdict(list)
for child in root:
for movie in root.findall("./genre/decade/movie[@title]"):
d[child.attrib['category']].append(movie.attrib['title'])
>>d
defaultdict(list,
{'Action': ['Indiana Jones: The raiders of the lost Ark',
'THE KARATE KID',
'Back 2 the Future',
'X-Men',
'Batman Returns',
'Reservoir Dogs',
'ALIEN',
"Ferris Bueller's Day Off",
'American Psycho'],
'Thriller': ['Indiana Jones: The raiders of the lost Ark',
'THE KARATE KID',
'Back 2 the Future',
'X-Men',
'Batman Returns',
'Reservoir Dogs',
'ALIEN',
"Ferris Bueller's Day Off",
'American Psycho']})
Если вы хотите выбрать только сказать «Действие»', вы можете просто выбрать, как обычный словарный ключ.
d['Action']