Cómo extraer archivos zip de forma recursiva en Python

Tengo un archivo zip que contiene tres archivos zip como este:

zipfile.zip\  
    dirA.zip\
         a  
    dirB.zip\
         b  
    dirC.zip\
         c

Quiero extraer todos los archivos zip internos que están dentro del archivo zip en directorios con estos nombres (dirA, dirB, dirC).
Básicamente, quiero terminar con el siguiente esquema:

output\  
    dirA\
         a  
    dirB\
         b  
    dirC\
         c

He probado lo siguiente:

import os, re
from zipfile import ZipFile

os.makedirs(directory)  # where directory is "\output"
with ZipFile(self.archive_name, "r") as archive:
    for id, files in data.items():
        if files:
            print("Creating", id)
            dirpath = os.path.join(directory, id)

            os.mkdir(dirpath)

            for file in files:
                match = pattern.match(filename)
                new = match.group(2)
                new_filename = os.path.join(dirpath, new)

                content = archive.open(file).read()
            with open(new_filename, "wb") as outfile:
                outfile.write(content)

Pero solo extrae el archivo zip y termino con:

output\  
    dirA\
         dirA.zip 
    dirB\
         dirB.zip 
    dirC\
         dirC.zip

Algunasugerencias incluyendo segmentos de código será muy apreciado porque he intentado tantas cosas diferentes y he leído los documentos sin éxito.

Respuestas a la pregunta(3)

Su respuesta a la pregunta