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

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

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

森林海 2021-12-09 14:37:36
我得到了项目列表和他们的分数。如何返回每个子文件夹中具有最高项目的列表从[('../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)]
查看完整描述

3 回答

?
POPMUISE

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

import os


result = {}

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)]


查看完整回答
反对 回复 2021-12-09
?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

如果您只需要最大值,则可以将目录放入字典中并关闭它,然后保留最大值。


from pathlib import PurePath


max_dict = {}

for path, val in lst:

    parent = PurePath(path).parent

    max_dict[parent] = max(max_dict.get(parent, float('-inf')), val)


查看完整回答
反对 回复 2021-12-09
?
慕仙森

TA贡献1827条经验 获得超8个赞

这是使用 Pandas 的一种方法:


# Create example data frame

df = 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 frame

df = 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 score

df.groupby(1)['score'].max().reset_index()


       1  score

0  dir_a   5.15

1  dir_b   4.19

然后,如果需要,您可以将这些值转换回列表。


查看完整回答
反对 回复 2021-12-09
  • 3 回答
  • 0 关注
  • 215 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号