如何接收对象属性的任意组合并从 Python 中的对象列表中返回匹配的对象?



如果以前有人回答过这个问题,我很抱歉,但我根本找不到这个问题的答案。

假设我有这个类和对象列表:

def Person:
def __init__(self, name, country, age):
self.name = name
self.country = country
self.age = age
persons = [Person('Tom', 'USA', 20), Person('Matt', 'UK', 19), Person('Matt', 'USA', 20)]

现在,我希望用户通过输入属性值的任意组合来搜索一个人,并且我希望只返回具有所有这些值的对象。例如,如果用户输入:"Matt"、"USA"且没有年龄,我希望程序只返回来自美国的Matt第三个人,而不返回所有三个对象,因为所有对象都有一些输入的属性值组合。

我的实现目前使用了一个带有or运算符的if语句,该语句将返回自使用or以来的所有对象,如果一个语句为True,则将返回所有对象,这正是我试图解决的问题。

提前谢谢。

您可以对任务使用列表理解。if条件应该检查列表中的值是否为None else check。

class Person:
def __init__(self, name, country, age):
self.name = name
self.country = country
self.age = age
def __repr__(self):
return "[{},{},{}]".format(name, country, str(age))
persons = [Person('Tom', 'USA', 20), Person('Matt', 'UK', 19), Person('Matt', 'USA', 20)]
name = "Matt"
country = "USA"
age = None
result = [
p for p in persons
if (name == None or p.name == name) and 
(country == None or p.country == country) and 
(age == None or p.age == age)
]
print(result) #[[Matt,USA,None]]

最新更新