Python: convierte un complejo diccionario de cadenas de Unicode a ASCII [duplicado]

Posible duplicado:
¿Cómo obtener objetos de cadena en lugar de objetos Unicode de JSON en Python?

Tengo muchos datos de entrada como diccionarios de varios niveles analizados a partir de llamadas a la API JSON. Las cadenas están todas en Unicode, lo que significa que hay una gran cantidad deu'stuff like this'. estoy usandojq para jugar con los resultados y la necesidad de convertir estos resultados a ASCII.

Sé que puedo escribir una función para convertirla así:

def convert(input):
    if isinstance(input, dict):
        ret = {}
        for stuff in input:
            ret = convert(stuff)
    elif isinstance(input, list):
        ret = []
        for i in range(len(input))
            ret = convert(input[i])
    elif isinstance(input, str):
        ret = input.encode('ascii')
    elif :
        ret = input
    return ret

¿Es esto correcto? No es seguro. Eso no es lo que quiero preguntarte aunque.

Lo que pregunto es que esta es una solución típica de fuerza bruta para el problema. Tiene que haber una mejor manera. Una forma más pitónica. No soy un experto en algoritmos, pero este tampoco parece particularmente rápido.

Entonces, ¿hay una mejor manera? O si no, ¿puede mejorarse esta función ...?

Edición post-respuesta

La respuesta de mark amery es correcto pero me gustaría publicar una versión modificada de la misma. Su función funciona en Python 2.7+ y estoy en 2.6, así que tuve que convertirlo:

def convert(input):
    if isinstance(input, dict):
        return dict((convert(key), convert(value)) for key, value in input.iteritems())
    elif isinstance(input, list):
        return [convert(element) for element in input]
    elif isinstance(input, unicode):
        return input.encode('utf-8')
    else:
        return input

Respuestas a la pregunta(1)

Su respuesta a la pregunta