Python 中的过滤对象数组

Adr*_*ian 15 python oop python-3.x

我正在使用 Python 来挖掘一个相当大的项目并挖掘有关它的信息。我能够创建一个ProjectFiles 数组,但是我很难弄清楚如何过滤它。

class ProjectFile:
    def __init__(self, filename: str,
                 number_of_lines: int,
                 language: str,
                 repo: str,
                 size: int):
        self.filename = filename
        self.number_of_lines = number_of_lines
        self.language = language
        self.repo = repo
        self.size = size
Run Code Online (Sandbox Code Playgroud)

我如何过滤ProjectFile特定对象的数组repo

例如,假设我想过滤repo属性为 的对象SomeCocoapod

我寻找过 的示例filter,但我找到的所有内容都使用简单的示例,例如str或 的列表int

Hie*_*nga 17

您可以使用点符号选择类的属性。

假设arr是 ProjectFile 对象的数组。现在您可以使用以下方式过滤 SomeCocoapod。

filter(lambda p: p.repo == "SomeCocoapod", arr)
Run Code Online (Sandbox Code Playgroud)

注意:这会返回一个过滤器对象,它是一个生成器。要返回过滤后的列表,您可以将其包装在列表构造函数中。

作为一个非常Pythonic的替代方案,你可以使用列表推导式:

filtered_arr = [p for p in arr if p.repo == "SomeCocoapod"]
Run Code Online (Sandbox Code Playgroud)