Python 对列表和dict键进行排序

Python 对列表和dict键进行排序,python,list,python-2.7,dictionary,Python,List,Python 2.7,Dictionary,我正在使用python 2.7,我有以下列表: photos = ['arthur20.jpg', 'arthur7.jpg', 'arthur11.jpg', 'arthur3.jpg', 'arthur5.jpg', 'arthur17.jpg', 'arthur15.jpg', 'arthur2.jpg', 'arthur13.jpg', 'arthur8.jpg', 'arthur9.jpg', 'arthur18.jpg', 'arthur4.jpg', 'arthur6.jpg',

我正在使用python 2.7,我有以下列表:

photos = ['arthur20.jpg', 'arthur7.jpg', 'arthur11.jpg', 'arthur3.jpg', 'arthur5.jpg', 'arthur17.jpg', 'arthur15.jpg', 'arthur2.jpg', 'arthur13.jpg', 'arthur8.jpg', 'arthur9.jpg', 'arthur18.jpg', 'arthur4.jpg', 'arthur6.jpg', 'arthur10.jpg', 'arthur12.jpg', 'arthur14.jpg', 'arthur19.jpg', 'arthur16.jpg', 'arthur1.jpg']
我如何组织这个列表?我尝试使用
sort()
,但没有成功,它返回了以下信息:

['arthur1.jpg', 'arthur10.jpg', 'arthur11.jpg', 'arthur12.jpg', 'arthur13.jpg', 'arthur14.jpg', 'arthur15.jpg', 'arthur16.jpg', 'arthur17.jpg', 'arthur18.jpg', 'arthur19.jpg', 'arthur2.jpg', 'arthur20.jpg', 'arthur3.jpg', 'arthur4.jpg', 'arthur5.jpg', 'arthur6.jpg', 'arthur7.jpg', 'arthur8.jpg', 'arthur9.jpg']
列表中的字符串将是dict的键,我也必须把键按顺序排列,如下所示:

dict = {"arthur1.jpg":1, "arthur2.jpg":2 ...}

我想你可能正在寻找一个软件包,它可以处理这些更复杂的排序,因为数字的长度没有标准化,所以通常的lexography排序会失败

>>> natsorted(['arthur20.jpg', 'arthur7.jpg', 'arthur11.jpg', 
               'arthur3.jpg', 'arthur5.jpg', 'arthur17.jpg', 
               'arthur15.jpg', 'arthur2.jpg', 'arthur13.jpg',
               'arthur8.jpg', 'arthur9.jpg', 'arthur18.jpg', 
               'arthur4.jpg', 'arthur6.jpg', 'arthur10.jpg',
               'arthur12.jpg', 'arthur14.jpg', 'arthur19.jpg',
               'arthur16.jpg', 'arthur1.jpg'])
['arthur1.jpg', 'arthur2.jpg', 'arthur3.jpg', 'arthur4.jpg', 
 'arthur5.jpg', 'arthur6.jpg', 'arthur7.jpg', 'arthur8.jpg', 
 'arthur9.jpg', 'arthur10.jpg', 'arthur11.jpg', 'arthur12.jpg',     
 'arthur13.jpg', 'arthur14.jpg', 'arthur15.jpg', 'arthur16.jpg',
 'arthur17.jpg', 'arthur18.jpg', 'arthur19.jpg', 'arthur20.jpg']

我想你可能正在寻找一个软件包,它可以处理这些更复杂的排序,因为数字的长度没有标准化,所以通常的lexography排序会失败

>>> natsorted(['arthur20.jpg', 'arthur7.jpg', 'arthur11.jpg', 
               'arthur3.jpg', 'arthur5.jpg', 'arthur17.jpg', 
               'arthur15.jpg', 'arthur2.jpg', 'arthur13.jpg',
               'arthur8.jpg', 'arthur9.jpg', 'arthur18.jpg', 
               'arthur4.jpg', 'arthur6.jpg', 'arthur10.jpg',
               'arthur12.jpg', 'arthur14.jpg', 'arthur19.jpg',
               'arthur16.jpg', 'arthur1.jpg'])
['arthur1.jpg', 'arthur2.jpg', 'arthur3.jpg', 'arthur4.jpg', 
 'arthur5.jpg', 'arthur6.jpg', 'arthur7.jpg', 'arthur8.jpg', 
 'arthur9.jpg', 'arthur10.jpg', 'arthur11.jpg', 'arthur12.jpg',     
 'arthur13.jpg', 'arthur14.jpg', 'arthur15.jpg', 'arthur16.jpg',
 'arthur17.jpg', 'arthur18.jpg', 'arthur19.jpg', 'arthur20.jpg']
sort()
将按照列表的自然顺序(在本例中为字典顺序)对列表进行排序。您可以使用自定义排序函数按“arthur”后面的数字进行排序。IMHO最简单的方法是使用正则表达式提取数字:

import re
photos.sort(key = lambda x : int(re.findall('\d+', x)[0]))
对列表进行排序后,创建所需的
dict
只需
zip
ing即可:

from collections import OrderedDict
dict = OrderedDict(zip(photos, range(1, len(photos) + 1)))
sort()
将按照列表的自然顺序(在本例中为字典顺序)对列表进行排序。您可以使用自定义排序函数按“arthur”后面的数字进行排序。IMHO最简单的方法是使用正则表达式提取数字:

import re
photos.sort(key = lambda x : int(re.findall('\d+', x)[0]))
对列表进行排序后,创建所需的
dict
只需
zip
ing即可:

from collections import OrderedDict
dict = OrderedDict(zip(photos, range(1, len(photos) + 1)))

对于像Meth这样的初学者来说,这是一个可以理解的答案。对于像Mealth这样的初学者来说,这是一个可以理解的答案。尽管公认的答案含蓄地表明了这一点——这个问题将从“它不起作用”的扩展中受益——它以什么方式不起作用?一个简化的输入列表和它被排序的顺序将澄清这一点,并以某种方式做出一个哦,对了,对不起,下次我会更加小心。它没有这样做的原因是,当我将sort()函数用于我的“照片”时,名称仍然不按顺序排列:[“arthur10.jpg”、“arthur8.jpg”、“arthur7.jpg”、“arthur6.jpg”、“arthur5.jpg”、“arthur20.jpg”、“arthur19.jpg”、“arthur18.jpg”、“arthur17.jpg”…]是的,我知道你看到的顺序是字典式的,所以你会看到例如,[“arthur1”,“arthur10”,“arthur11”,“arthur2”…]在排序之后。这里的想法是,你以一种对未来读者和潜在回答者来说很清楚的方式提问-这就是为什么我建议你编辑这个问题,否则这个问题可能会被关闭,因为它不符合这些标准。查看所有这一切的官方路线-我刚刚通过“关闭投票修正”来了解你的问题ew queue,我想我可以提供一点建议。好的,谢谢,我下次会更加仔细和详细,虽然被接受的答案暗示了这一点-这个问题将受益于“它不起作用”的扩展“-它以什么方式不起作用?一个简化的输入列表和它被排序的顺序将澄清这一点,并以某种方式做出一个哦,对了,对不起,下次我会更加小心。它没有这样做的原因是,当我将sort()函数用于我的“照片”时,名称仍然不按顺序排列:[“arthur10.jpg”、“arthur8.jpg”、“arthur7.jpg”、“arthur6.jpg”、“arthur5.jpg”、“arthur20.jpg”、“arthur19.jpg”、“arthur18.jpg”、“arthur17.jpg”…]是的,我知道你看到的顺序是字典式的,所以你会看到例如,[“arthur1”,“arthur10”,“arthur11”,“arthur2”…]在排序之后。这里的想法是,你以一种对未来读者和潜在回答者来说很清楚的方式提问-这就是为什么我建议你编辑这个问题,否则这个问题可能会被关闭,因为它不符合这些标准。查看所有这一切的官方路线-我刚刚通过“关闭投票修正”来了解你的问题我想我可以提供一些建议。好的,谢谢。下次我会更仔细更详细的