为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕婉清6462132 2023-08-15 18:41:07
我正在使用 Python,并且数组列表中有以下目录和文件,如下所示:file_list = []for file in file_list:    print(file)下面显示的输出(没有特定的顺序)。Testcase/result.logTestcase/system/system.logTestcase/data/database.logTestcase/mem/mem.logTestcase/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?
查看完整描述

3 回答

?
子衿沉夜

TA贡献1828条经验 获得超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()价格昂贵。


查看完整回答
反对 回复 2023-08-15
?
四季花海

TA贡献1811条经验 获得超5个赞

假设您只想重新排列路径,包括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)


查看完整回答
反对 回复 2023-08-15
?
千巷猫影

TA贡献1829条经验 获得超7个赞

在这里排序不是一个好主意。而是使用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 OrderedDict

keys = 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())完成流程后即可使用。


查看完整回答
反对 回复 2023-08-15
  • 3 回答
  • 0 关注
  • 87 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信