得到一个项目和分数的列表。如何返回每个子文件夹中具有最高项目的列表

我得到了项目列表和他们的分数。如何返回每个子文件夹中具有最高项目的列表



[('../dir_a/1.png', 5.14), 

 ('../dir_a/2.png', 5.15), 

 ('../dir_b/3.png', 4.19), 

 ('../dir_b/4.png', 3.81)]


[('../dir_a/2.png', 5.15), 

 ('../dir_b/3.png', 4.19)]


森林海
浏览 216回答 3
3回答

POPMUISE

import osresult = {}lst = [('../dir_a/1.png', 5.14), ('../dir_a/2.png', 5.15), ('../dir_b/3.png', 4.19), ('../dir_b/4.png', 3.81)]for p in lst:    base_dir =  os.path.basename(os.path.dirname(p[0]))     #Use base dir as key    if base_dir not in result:        result[base_dir] = ("", 0)    if p[1] > result[base_dir][1]:                          #check score        result[base_dir] = (p)print(result.values())                                      #Get values输出:[('../dir_a/2.png', 5.15), ('../dir_b/3.png', 4.19)]

明月笑刀无情

如果您只需要最大值,则可以将目录放入字典中并关闭它,然后保留最大值。from pathlib import PurePathmax_dict = {}for path, val in lst:    parent = PurePath(path).parent    max_dict[parent] = max(max_dict.get(parent, float('-inf')), val)

慕仙森

这是使用 Pandas 的一种方法:# Create example data framedf = pd.DataFrame([('../dir_a/1.png', 5.14),                    ('../dir_a/2.png', 5.15),                    ('../dir_b/3.png', 4.19),                    ('../dir_b/4.png', 3.81)], columns = ['path', 'score'])# Split the file path by '/' and expand into columns with original data framedf = pd.concat([df.path.str.split('/', expand=True), df], axis=1)# Group the rows based on the directory name (column 1) and find the max scoredf.groupby(1)['score'].max().reset_index()       1  score0  dir_a   5.151  dir_b   4.19然后,如果需要,您可以将这些值转换回列表。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python