If they're siblings then you essentially have to do something along the lines of what you did, i.e. keep track of the last seen dt and add dds to it.
Code:
current_section, current_articles = None, []
for x in findAll(['dt', 'dd']):
if x.name == 'dt':
if current_section and current_articles:
sections.append((current_section, current_articles))
current_section, current_articles = set.tag_to_string(x), []
else:
current_articles.append(...)