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(...)