Смотрю код на python и удивляюсь.В качестве программы для решения судоку приведён "подстрочник" программы на C.
Согласитесь, что фрагменты кода
sr = [0 for r in range(729)]
или
y = []
for j in range(81): y.append(out[j])
иначе чем глумлением не назвать. Поверхностные исправления (без попытки исправить неудачные для python структуры данных) уменьшили время исполнения на 10%. Понятно, что для качественного изменения результата нужно уменьшить время выполнения вдвое. Это, вероятно, возможно.
А уж работа со словарём как вызывающе сделана...