我正在尝试对100个文件名列表进行排序,以便在以后的计算中以正确的顺序使用它们。所有文件名都有' name_1'在名称的开头和' _out.txt'在末尾。差异是介于两者之间的数字,从1-100
列表看起来有点像这样:
['name_1_100_out.txt', 'name_1_10_out.txt', 'name_1_6_out.txt', 'name_1_5_out.txt', 'name_1_2_out.txt']
对于我想要的这个实际例子:
['name_1_2_out.txt', 'name_1_5_out.txt', 'name_1_6_out.txt', 'name_1_10_out.txt', 'name_1_100_out.txt']
现在我尝试了list.sort
和sorted(list)
,但没有运气。我也尝试过使用key = int或key = str,但是没有一个可以提供帮助,因为它似乎无法将字符串的一部分转换为int。
任何人都可以帮助我提供建议
答案 0 :(得分:2)
你需要前导零来按你想要的方式排序。
MyUser u = new MyUser();
// find users without the last name containing "Jay"
u.AdvancedSearchFilter.WhereLastName("Jay", MatchType.NotEquals);
PrincipalSearcher ps = new PrincipalSearcher(u);
var res = ps.FindAll().Cast<MyUser>();
foreach (MyUser p in res)
{
// use the results here.
}
结果
#!/usr/bin/python
# -*- coding: utf-8 -*-
L=['name_1_100_out.txt', 'name_1_10_out.txt', 'name_1_6_out.txt', 'name_1_5_out.txt', 'name_1_2_out.txt']
OUT=[]
n='100' # max number
for item in L:
old=item[7:-8] # Faulty index
if len(old) < len(n):
new='0'*(len(n)-len(old))+old # Nice index
item=item.replace(old, new)
OUT.append(item)
OUT.sort()
print OUT
]
我建议重命名文件以便以后更轻松,因为并非所有文件管理器都按顺序显示错误的文件名。
答案 1 :(得分:1)
您可以使用key
功能执行此任务:
>>> l = ['name_1_100_out.txt', 'name_1_10_out.txt', 'name_1_6_out.txt', 'name_1_5_out.txt', 'name_1_2_out.txt']
>>> sorted(l,key=lambda s: int(s.split('_')[2]))
['name_1_2_out.txt', 'name_1_5_out.txt', 'name_1_6_out.txt', 'name_1_10_out.txt', 'name_1_100_out.txt']
答案 2 :(得分:-1)
lista = ['2','3','5','8','4','6','1']
listb = [('2','3'),('5','8'),('4','6'),('1','9')]
listc = {'a':'3','b':'5','c':'9','d':'4','e':'2','f':'0'}
d = sorted(lista, key=lambda item:int(item), reverse=True)
e = sorted(listb, key=lambda item:int(item[0]) + int(item[1]), reverse=True)
f = sorted(listc.items(), key=lambda item:int(item[1]), reverse=True)
print(d)
print(e)
print(f)
输出:
['8', '6', '5', '4', '3', '2', '1']
[('5', '8'), ('4', '6'), ('1', '9'), ('2', '3')]
[('c', '9'), ('b', '5'), ('d', '4'), ('a', '3'), ('e', '2'), ('f', '0')]