3 回答

TA貢獻(xiàn)1765條經(jīng)驗 獲得超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)]

TA貢獻(xiàn)1828條經(jīng)驗 獲得超4個贊
如果您只需要最大值,則可以將目錄放入字典中并關(guān)閉它,然后保留最大值。
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)

TA貢獻(xiàn)1827條經(jīng)驗 獲得超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
然后,如果需要,您可以將這些值轉(zhuǎn)換回列表。
添加回答
舉報