Python 未排序的文件名集

Python 未排序的文件名集,python,Python,我正在使用带有生成器的os.walk来填充一组文件名,以便以后使用以下内容进行操作: file_path = '/home/user/Developer/10/' list_of_files = {} cnt = 0 for (dirpath, dirnames, filenames) in os.walk(file_path): for filename in filenames: if filename.endswith('.xml'): li

我正在使用带有生成器的
os.walk
来填充一组文件名,以便以后使用以下内容进行操作:

file_path = '/home/user/Developer/10/'
list_of_files = {}
cnt = 0
for (dirpath, dirnames, filenames) in os.walk(file_path):
    for filename in filenames:
        if filename.endswith('.xml'):
            list_of_files[cnt] = os.sep.join( [dirpath, filename] )
            cnt += 1
列表\u文件
排序为:

{0: '/home/user/Developer/10/2/test/channe 1_UTC_DEtoSE_183126.585.xml',
 1: '/home/user/Developer/10/2/test/channe 1_UTC_DEtoSE_183216.572.xml',
 2: '/home/user/Developer/10/2/test/channe 1_UTC_DEtoSE_183123.015.xml',
 3: '/home/user/Developer/10/2/test/channe 1_UTC_DEtoSE_183058.016.xml',
 4: '/home/user/Developer/10/2/test/channe 1_UTC_DEtoSE_183130.151.xml',
 5: '/home/user/Developer/10/2/test/channe 1_UTC_DEtoSE_183140.873.xml',
 6: '/home/user/Developer/10/2/test/channe 1_UTC_DEtoSE_183223.729.xml',
 7: '/home/user/Developer/10/2/test/channe 1_UTC_DEtoSE_183054.451.xml',
 8: '/home/user/Developer/10/2/test/channe 1_UTC_DEtoSE_183148.014.xml',
 9: '/home/user/Developer/10/2/test/channe 1_UTC_DEtoSE_183202.296.xml'}

我知道python在填充列表时不会对文件名进行排序,但我的印象是集合是自排序的?如果没有,我如何按文件名按字母数字排序?如果我使用
sorted()
If返回一个带有集合元素编号的列表对象,这是非常无用的。

正如注释所指出的,
list\u of\u files
是一个字典,而不是集合。将文件的列表更改为空列表,并使用append()进行初始化,例如:

这就是诀窍


感谢您及时提供的宝贵意见

您可以使用pathlib模块仅通过一个dict理解来提取所有XML文件

from pathlib import Path

file_path = Path('./home/user/Developer/10/')
list_of_files = {
    index: str(xml_file.absolute())
    for index, xml_file in enumerate(file_path.glob('**/*.xml'))
}

list_of_files  = dict(sorted(list_of_files.items(),key=lambda x:x[0])) # sort dict based on values

我不确定下面的片段是否会有所帮助;基本上,您可以按字典的值(而不是键)排序


这里使用的不是集合,而是dict。在最近的Python版本中,dict是按插入顺序迭代的,根据以前版本中的元素散列值以任意顺序迭代。如果您使用的是集合,那么在任何Python版本中都会得到任意顺序。这些数据类型的内部细节经过优化,以实现尽可能快的操作;按排序的顺序生成输出会严重减慢速度。这不是一个集合,而是一个字典,默认情况下,它本质上是无序的,或者在插入值时是有序的。(但布景也是无序的)。您必须将其转换为其他对象类型(list、np.array、dataframe等),以便进行排序。或者只是更改代码,将文件名收集到其他文件中,而不是字典中。参见此,了解更多信息:感谢二者指出我的误解,即重复记录与集合。集合也不是自排序的-集合没有特定的顺序。
from pathlib import Path

file_path = Path('./home/user/Developer/10/')
list_of_files = {
    index: str(xml_file.absolute())
    for index, xml_file in enumerate(file_path.glob('**/*.xml'))
}

list_of_files  = dict(sorted(list_of_files.items(),key=lambda x:x[0])) # sort dict based on values
for v in sorted(list_of_files.values()):
    print(v)