如何在Python中根据特定数据集对数组进行排序

我正在使用 Python,并且数组列表中有以下目录和文件,如下所示:


file_list = []

for file in file_list:

    print(file)

下面显示的输出(没有特定的顺序)。


Testcase/result.log

Testcase/system/system.log

Testcase/data/database.log

Testcase/mem/mem.log

Testcase/cashe/cashe.log

现在,我有另一个名为 的 Python 字符串target_str,它可以具有随机值,例如'mem'或'database'。在这种情况下,如果target_str与内容条目匹配,则应更改数组file_list的顺序,并将匹配的值放在前面。file_list


例如:


target_str = 'mem'


    Testcase/mem/mem.log   [Note: this entry moves at the first position since it matches the 'target_str']    

    Testcase/result.log

    Testcase/system/system.log

    Testcase/data/database.log

    Testcase/cashe/cashe.log 

想知道如何file_list根据 的值对条目进行排序target_str?


慕婉清6462132
浏览 112回答 3
3回答

子衿沉夜

您可以使用该函数sorted()并为其提供 lambda 键。在这种情况下,我们将保持它们相同的顺序,但将包含的内容移到target_str顶部:file_list = [    'Testcase/result.log',    'Testcase/system/system.log',    'Testcase/data/database.log',    'Testcase/mem/mem.log',    'Testcase/cashe/cashe.log',]print(    sorted(file_list, key=lambda f:[target_str not in f, file_list.index(f)]))# [#    'Testcase/mem/mem.log', #    'Testcase/result.log', #    'Testcase/system/system.log', #    'Testcase/data/database.log', #    'Testcase/cashe/cashe.log'# ]如果key函数sorted()返回列表或元组,则元素按该顺序优先排序。首先,排序target_str not in f(False排序之前True,所以如果文件名确实包含目标字符串,它将排在第一位)。然后,如果出现平局,则按文件名的索引进行排序。如果您有一个非常大的文件列表,那么您可能需要进行排序enumerate(file_list),以获取每个文件的索引,而不必.index()每次都调用。.index()价格昂贵。

四季花海

假设您只想重新排列路径,包括target_dir到顶部。您可以过滤包含其余路径target_dir并与其余路径合并data = [  'Testcase/result.log',  'Testcase/system/system.log',  'Testcase/data/database.log',  'Testcase/mem/mem.log',  'Testcase/cashe/cashe.log',]target_dir = 'mem'target = [item for item in data if target_dir in item]rest = [item for item in data if item not in target]res = [*target, *rest]print(res)

千巷猫影

在这里排序不是一个好主意。而是使用OrderedDict。file_list = ["Testcase/result.log","Testcase/system/system.log","Testcase/data/database.log","Testcase/mem/mem.log","Testcase/cashe/cashe.log"]d  = {}from collections import OrderedDictkeys = list(map(lambda x:x.split("/")[-1].strip(".log"), file_list))#I took the <text>.log  the text as the key d = OrderedDict(zip(keys,file_list))text = "mem"d.move_to_end(text, last=False)print(d)list(d.values())完成流程后即可使用。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python