Как отсортировать множество путей папок по длине?

Рейтинг: -1Ответов: 1Опубликовано: 19.01.2023

folders_paths - это множество путей к папкам. Но когда я перебираю их, чтобы переименовать, они лежат во множестве после добавления случайным образом. И я могу переименовать их только когда так совпало, что они лежат во множестве в правильном порядке. Как я могу отсортировать множество, например по длине. Чтобы самые длинные файлы лежали в начале?

for folder_for_rename in folders_paths:
    print(sort(folders_paths), 'sorted')
    new_name = normalize(str(folder_for_rename.name))
    print(folders_paths, '!')
    print(folder_for_rename,'*')
    print(str(split(folder_for_rename)[0]),'**')
    print(new_name.split('.')[0],'***')
    os.rename(folder_for_rename, str(split(folder_for_rename)[0]) + '\\' + new_name.split('.')[0])

Ответы

▲ 2Принят

Можно использовать метод sorted, который принимает коллекцию из объектов, поддающихся сравнению и возвращает отсортированный список из этих объектов. Например:

a = {'sdgs', 'd' , 'hi tho', 'python'}
print(sorted(a))

Вывод:

['d', 'hi tho', 'python', 'sdgs']

Также метод может принимать функцию key - определённая пользователем функция, которая возвращает некоторый объект по которому будет происходить сортировка. По умолчанию строки сравниваются лексикографически (т.е. по алфавиту). Если вы хотите отсортировать их по длине, то передайте туда ключевую функцию, которая будет возвращать длину строки (тогда сортировка будет происходить по длине):

a = {'sdgs', 'd' , 'hi tho', 'python'}
print(sorted(a, key = lambda x: len(x)))

Вывод:

['d', 'sdgs', 'python', 'hi tho']