Я бы использовал ту же логику с циклами for для проверки дубликатов ... возможно, есть что-то лучшее, что можно сделать, но сейчас на нашем уровне я думаю, что это хорошее начало.
просмотр вашего кода:
for i in dirty[1:]:
Вот почему вы начинаете после первого элемента в вашем списке, его нужно исключить?если это так, вы удаляете его в любом случае с помощью:
01.delete('1.0', END)
Возможно, вам придется изменить код на 01.delete ('2.0', END) , если вам нужно сохранить первыйline.
if i not in clean:
clean.append(i)
clean.append('\n')
Здесь вы создаете более длинный список с кучей новых строк, каждый из которых считается членом вашего списка, интересно ... Я перепутался с этой частью ... после тестирования я вижу ваширезультаты только вдвое страннее, чем я.
последняя строка: вы толкаете свой исправленный список прямо в свой виджет, что приводит к странному результату.
01.insert(END, clean)
Исправьте это, этопуть; 01.insert (END, '' .join (clean)) это разобьет ваш список на строку, содержащую ранее вставленные символы новой строки, и поместит весь текст в нужное место.