Python中的对象过滤器数组
我正在使用Python挖掘一个相当大的项目,并挖掘有关它的信息。我能够创建一个Python中的对象过滤器数组,python,python-3.x,oop,Python,Python 3.x,Oop,我正在使用Python挖掘一个相当大的项目,并挖掘有关它的信息。我能够创建一个ProjectFiles数组,但是我很难弄清楚如何过滤它 class ProjectFile: def __init__(self, filename: str, number_of_lines: int, language: str, repo: str, size: int
ProjectFile
s数组,但是我很难弄清楚如何过滤它
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
如何为特定的repo
过滤ProjectFile
对象数组
例如,假设我想筛选repo
属性为somecoacoapod
的对象
我已经查找了
filter
的示例,但我找到的所有内容都使用了简单的示例,如str
列表或int
您可以使用点符号选择类的属性
假设arr
是一个ProjectFile对象数组。现在,您可以使用来筛选某些CoCoapod
filter(lambda p: p.repo == "SomeCocoapod", arr)
注意:这将返回一个筛选器对象,它是一个生成器。要恢复过滤列表,可以将其包装在列表构造函数中
作为一种非常类似Python的替代方法,您可以使用列表理解:
filtered_arr = [p for p in arr if p.repo == "SomeCocoapod"]
假设您有两个
ProjectFile
对象的简单列表:
projects = [
ProjectFile(
filename="test1.txt",
number_of_lines=1,
language="English",
repo="repo1",
size=1,
),
ProjectFile(
filename="test2.txt",
number_of_lines=2,
language="German",
repo="repo2",
size=2
),
]
然后,您可以使用以下内容中的repo
属性筛选出repo1
:
以上假设您已经在
项目文件
类中重写了\uuuu str\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
或\uuuuuu repr\uuuuuuuuuuuuuuuuuu
,为您提供了筛选对象的字符串表示形式。否则,您将返回类似于[]
的内容(如果这是您希望看到的内容,则可以)。您可以查看以了解更多信息 太棒了!在使用lambda
进行过滤时,我需要将过滤器包装在列表中,它可以完美地工作:)
filtered = [project for project in projects if project.repo == "repo1"]