在python中按名称排序列表

时间:2017-06-19 15:14:34

标签: python

我有一个文件名列表。我需要根据下划线(_)后的结束名称对它们进行分组。我的列表看起来像这样:

[
    '1_result1.txt',
    '2_result2.txt',
    '3_result2.txt',
    '4_result3.txt',
    '5_result4.txt',
    '6_result1.txt',
    '7_result2.txt',
    '8_result3.txt',
]

我的最终结果应该是:

List1 = ['1_result1.txt', '6_result1.txt']

List2 = ['2_result2.txt', '3_result2.txt', '7_result2.txt']

List3 = ['4_result3.txt', '8_result3.txt']

List4 = ['5_result4.txt']

3 个答案:

答案 0 :(得分:2)

这将归结为制作列表字典,然后迭代输入并将每个项目添加到正确的列表中:

output = {}
for item in inlist:
    output.setdefault(item.split("_")[1], []).append(item)

print output.values()

我们使用setdefault确保该条目的列表,然后将我们当前的文件名添加到列表中。 output.values()只返回列表,而不是整个词典,这似乎是你想要的。

答案 1 :(得分:1)

使用defaultdict模块中的collections

from collections import defaultdict

output = defaultdict(list)
for file in data:
    output[item.split("_")[1]].append(file)

print output.values()

使用groupby模块中的itertools

data.sort(key=lambda x: x.split('_')[1])
for key, group in groupby(data, lambda x: x.split('_')[1]):
    print list(group)

答案 2 :(得分:0)

从Python 2.4开始,list.sort()和sorted()都添加了一个关键参数,用于指定在进行比较之前在每个列表元素上调用的函数。

key参数的值应该是一个函数,它接受一个参数并返回一个用于排序的键。这种技术很快,因为每个输入记录只调用一次键函数。

因此,如果l是您的列表的名称,那么您可以使用以下内容:

l.sort(key=lambda s: s.split('_')[1])

有关here

的关键功能的更多信息