別に手書きしても、こんなもんで大丈夫じゃないか

def pr(d):
    def spaces(indent): return " " * (indent * 4)
    ROOT, ROOT_END, ITEM = 1, 2, 3
    stack = [(ROOT_END, 0, d, None), (ROOT, 0, d, None)]
    while stack:
        type, indent, key, value = stack.pop()
        if type == ROOT:
            print "%s{" % spaces(indent)
            for k, v in reversed(key.items()):
                stack.append((ITEM, indent + 1, k, v))
        elif type == ROOT_END:
            print "%s}" % spaces(indent)
        else:
            s =  "%s%s:" % (spaces(indent), repr(key))
            if isinstance(value, dict):
                stack.append((ROOT_END, indent, value, None))
                stack.append((ROOT, indent, value, None))
            else:
                s += " %s" % repr(value)
            print s