Boha, ten kód je teda zrůdnost. Když modifikuješ mutable parametry, tak se asi stěží můžeš divit, že budou modifikované. Jejich inicializace probíhá při vytváření funkce, ne při volání.
a = []
for key, value in n.iteritems():
a.append(value)
return ''.join(a)
Se dá přepsat na
return "".join(n.values())
Podmínka
if 0 < len(i):
je
Yoda condition a dá se přepsat na
if i:
A tak dále. To ani nemluvím o tom jednopísmenném pojmenování proměnných. Co to šašíš s tím t, které inicializuješ na prázdné pole, pak mu vždycky předáváš string, který pak konvertuješ tam a zpět na pole jsem nepochopil už vůbec, ale rozhodně to není dobrá praktika.