我有一个文件名列表。我需要根据下划线(_)后的结束名称对它们进行分组。我的列表看起来像这样:
[
'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']
答案 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
的关键功能的更多信息