Break out of the itersiblings()
loop when you found your match:
for dfn in tree.iter('dfn'):
bu = dfn.text
for sibling in dfn.itersiblings():
su = sibling.text
if su != None and bu != None and re.findall(..,su):
places.append(bu)
break
The break
statement ends the for sibling
loop early, and no further siblings are processed. Instead, the outer for dfn
loop continues with the next dfn
element.