Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何按字母数字顺序设置列表?_Python_List_Sorting - Fatal编程技术网

Python 如何按字母数字顺序设置列表?

Python 如何按字母数字顺序设置列表?,python,list,sorting,Python,List,Sorting,我有一个文件夹,其中包含10个子文件夹,命名如下: 文件夹1,文件夹2,文件夹3,。。。 我想按这个顺序操纵它们,但是当我申请的时候 lst = os.listdir(dirname) lst.sort() 输出如下: Folder1 Folder10 Folder2 Folder3 Folder4 Folder5 Folder6 Folder7 Folder8 Folder9 lst = os.listdir(dirname) lst.sort() projects = {} for

我有一个文件夹,其中包含10个子文件夹,命名如下:

文件夹1,文件夹2,文件夹3,。。。 我想按这个顺序操纵它们,但是当我申请的时候

lst = os.listdir(dirname)
lst.sort()
输出如下:

Folder1
Folder10
Folder2
Folder3
Folder4
Folder5
Folder6
Folder7
Folder8
Folder9
lst = os.listdir(dirname)
lst.sort()

projects = {}

for p in lst:
    pInt = re.sub(r"Folder", " ", p)
    projects[pInt] = p
    print(p)

print projects
为了妥善解决问题,我做了以下工作:

Folder1
Folder10
Folder2
Folder3
Folder4
Folder5
Folder6
Folder7
Folder8
Folder9
lst = os.listdir(dirname)
lst.sort()

projects = {}

for p in lst:
    pInt = re.sub(r"Folder", " ", p)
    projects[pInt] = p
    print(p)

print projects
取得以下成果:

{' 10': 'Folder10', ' 2': 'Folder2', ' 3': 'Folder3', ' 1': 'Folder1', ' 6': 'Folder6', ' 7': 'Folder7', ' 4': 'Folder4', ' 5': 'Folder5', ' 8': 'Folder8', ' 9': 'Folder9'}

如何从那里开始正确地列出它们,以便我的系统按顺序逐个访问它们

您可以使用带有自定义键的
排序
。默认的是字典顺序,这不符合您的目的

>>> data
['Folder1', 'Folder10', 'Folder2', 'Folder3', 'Folder4', 'Folder5', 'Folder6', 'Folder7', 'Folder8', 'Folder9']
>>> sorted(data)
['Folder1', 'Folder10', 'Folder2', 'Folder3', 'Folder4', 'Folder5', 'Folder6', 'Folder7', 'Folder8', 'Folder9']
>>> sorted(data, key= lambda s: int(s.replace('Folder', '')))
['Folder1', 'Folder2', 'Folder3', 'Folder4', 'Folder5', 'Folder6', 'Folder7', 'Folder8', 'Folder9', 'Folder10']
如果不是每个文件夹都被称为
FolderX
,则可以使用此键:

>>> sorted(data, key= lambda s: int(''.join(filter(str.isdigit, s))))
['Folder1', 'Folder2', 'Data3', 'Folder4', 'Folder5', 'Folder6', 'Folder7', 'Folder8', 'Folder9', 'Folder10']

另一种方法是将
folderX
重命名为
folder0X
Folder02
将在
Folder10
之前排序

您需要字典吗
lst.sort()
应该以字母数字顺序保留列表,这已经是您想要的,无需创建字典。@PacoH。字典顺序不适用于
2
10
。请检查文件夹10在排名中是否在文件夹1之后,但应该在文件夹1之后9@EricDuminil哦,当然。我的错。