我使用的是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 ...}
答案 0 :(得分:3)
sort()
会按照自然顺序对列表进行排序,在本例中为字典排序。您可以按照以下数字对其进行排序" arthur"具有自定义排序功能。最简单的方法是恕我直言,使用正则表达式提取数字:
import re
photos.sort(key = lambda x : int(re.findall('\d+', x)[0]))
对列表进行排序后,创建所需的dict
只需zip
:{/ p>
from collections import OrderedDict
dict = OrderedDict(zip(photos, range(1, len(photos) + 1)))
答案 1 :(得分:2)
我认为你可能正在寻找处理这些更复杂的排序的natsort
包,其中通常的词法排序会失败,因为数字的长度没有被标准化。
>>> 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']
答案 2 :(得分:1)
import collections
origdict = {
4: "four",
5: "five",
1: "one",
2: "two"
}
od = collections.OrderedDict()
for key in sorted(origdict.keys()):
od[key] = origdict[key]
print od