gpt4 book ai didi

python - 将 methodcaller 和 attrgetter 与 sorted 相结合

转载 作者:太空宇宙 更新时间:2023-11-04 02:26:39 24 4
gpt4 key购买 nike

我想获取 PosixPath 对象的列表,并根据相应的文件大小对其进行排序。我正在尝试使用排序函数来做到这一点。我要用于排序的键是 object.stat().st_size,其中 object 是一个 PosixPath 对象,stat() 返回一个 os.stat_result 对象,st_size是PosixPath对象对应的文件大小。我知道如何使用 operator.methodcalleroperator.attrgetter 基于对象方法或对象属性进行排序,但我不知道如何使用属性methodcaller 返回的对象。

我尝试了以下和一些变体,但它不起作用:

from operator import attrgetter, methodcaller
from pathlib import Path

sorted(Path('my_directory').glob('*.extension'), key=methodcaller('stat').st_size)

最佳答案

它们不应该合并。您应该使用 lambda 作为键:

from pathlib import Path
sorted(Path('.').glob('*.py'), key=lambda p: p.stat().st_size)

或者,如果您想动态更改排序字段:

key_field = 'st_mtime'
sorted(Path('.').glob('*.py'),
key=lambda p: attrgetter(key_field)(p.stat()))

而且,如果你真的想使用 methodcallerattrgetter,你可以这样做:

sorted(Path('.').glob('*.py'), key=lambda p: attrgetter('st_size')(methodcaller('stat')(p)))

关于python - 将 methodcaller 和 attrgetter 与 sorted 相结合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50201450/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com