zip to unzip a dict is a very slow approach to do it
Instead of
mi = dict(zip(m.values(), m.keys()))
Do mi = {v: k for (k, v) in m.iteritems()}Instead of
mi = dict(zip(m.values(), m.keys()))
Do mi = {v: k for (k, v) in m.iteritems()} mi = dict((v,k) for k,v in m.iteritems())