在Python中创建和排序2D列表

时间:2018-09-28 20:52:49

标签: python python-3.x

我是Python的新手。我需要遍历目录中的文件列表,并具有带值的文件(键)的2D列表。然后,我需要根据它们的值对其进行排序,并删除值下半部分的文件。我该怎么办?

这是我到目前为止所做的。我不知道如何创建这样的2D数组。

dir = "images"
num_files=len(os.listdir(dir))
for file in os.listdir(dir):
    print(file)
    value = my_function(file)
    #this is wrong:
    _list[0][0].append(value)

#and then sorting, and removing the files associated with lower half

基本上,二维数组应类似于[[file1, 0.876], [file2, 0.5], [file3, 1.24]],需要根据第二个索引进行排序。

2 个答案:

答案 0 :(得分:2)

基于注释,看起来我在添加时必须这样做:

mylist.append([file, value])

对于排序,我必须这样做:

mylist.sort(key=lambda mylist: mylist[1])

答案 1 :(得分:0)

我不明白此消息的含义。

  

删除值下半部分的文件

这是否意味着您必须选择值小于文件最小值和最大值之间的中点的文件,或者只是选择文件的下半部分?

如果第二个坐标取决于第一个坐标,则my_function不需要使用2D数组。这是一个满足您需要的功能:

from os import listdir as ls
from os import remove as rm
from os.path import realpath

def delete_low_score_files(dir, func, criterion="midpoint")
    """Delete files having low score according to function f

       Args:
           dir (str): path of the dir;
           func (fun): function that score the files;
           criterion (str): can be "midpoint" or "half-list";
       Returns:
           (list) deleted files.
    """

    files = ls(dir)
    sorted_files = sorted(files, key=func)    

    if criterion == "midpoint":
        midpoint = func(sorted_files[-1]) - func(sorted_files[0])
        files_to_delete = [f for f in sorted_files if func(f) < midpoint]

    if criterion == "half-list":
        n = len(sorted_files)/2
        files_to_delete = sorted_files[:n]

    for f in files_to_delete:
        rm(realpath(f))

    return files_to_delete