Список папок списка Python по порядку номеров - PullRequest
0 голосов
/ 07 ноября 2019

Я получаю список всех папок в определенном каталоге с этим кодом:

TWITTER_FOLDER = os.path.join('TwitterPhotos')
dirs = [d for d in os.listdir(TWITTER_FOLDER) if os.path.isdir(os.path.join(TWITTER_FOLDER, d))]

Это массив: ['1','2','3','4','5','6','7','8','9','10','11'].

И я хочу получить массивв следующем порядке: ['11','10','9','8','7','6','5','4','3','2','1']

Поэтому я использую этот код для этого:

dirs.sort(key=lambda f: int(filter(str.isdigit, f)))

, и когда я его использую, я получаю эту ошибку:

int() argument must be a string, a bytes-like object or a number, not 'filter'

Любойидея в чем проблема? Или как я могу разобрать это по-другому? Важно, чтобы массив был отсортирован по числовому порядку, например:

12 11 10 9 8 7 6 5 4 3 2 1

А не:

9 8 7 6 5 4 3 2 12 11 1

Спасибо!

Ответы [ 2 ]

2 голосов
/ 07 ноября 2019

Используйте sorted с ключом:

In [4]: sorted(f, key=lambda x: int(x), reverse=True)
Out[4]: ['11', '10', '9', '8', '7', '6', '5', '4', '3', '2', '1']

Или вы можете сделать f.sort(key=lambda x:int(x), reverse=True) для сортировки на месте.

2 голосов
/ 07 ноября 2019

Фильтр возвращает итератор, вам нужно объединить их обратно в строку, прежде чем вы сможете преобразовать его в целое число

dirs.sort(key=lambda f: int(''.join(filter(str.isdigit, f))))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...