Python中从列表综合搜索访问对象

Python中从列表综合搜索访问对象,python,Python,我正在使用列表综合“搜索”来匹配employee类的对象。然后,我想根据匹配搜索的人为它们分配一个值 基本上,这相当于问谁喜欢三明治,然后给那个人一个三明治 这个钻头有效 class Employee(): def __init__(self, name, age, favoriteFood): self.name = name self.age = age self.favoriteFood = favoriteFood def __repr__(self):

我正在使用列表综合“搜索”来匹配employee类的对象。然后,我想根据匹配搜索的人为它们分配一个值

基本上,这相当于问谁喜欢三明治,然后给那个人一个三明治

这个钻头有效

class Employee():
  def __init__(self, name, age, favoriteFood):
    self.name = name
    self.age = age
    self.favoriteFood = favoriteFood

  def __repr__(self):
    return "Employee {0}".format(self.name)    

employee1 = Employee('John', 28, 'Pizza')
employee2 = Employee('Kate', 27, 'Sandwiches')

myList = [employee1, employee2]

a = 'Sandwiches'
b = 'Tuna Mayo Sandwich'
matchingEmployee = [x for x in myList if x.favoriteFood == a]

print matchingEmployee
这将打印类中的“雇员凯特”repr

我现在坚持的是给凯特金枪鱼蛋黄酱三明治,b值

我希望做一些类似的事情

matchingEmployee.food = b
但这不会在该对象中创建一个新变量并将其值设为b


任何帮助都会得到很大的帮助

由于变量matchingEmployee是一个列表,并且在给定的上下文中,Kate是列表中的第一个,因此可以执行以下操作:

matchingEmployee[0].food = b 

由于变量matchingEmployee是一个列表,并且在给定的上下文中,Kate是列表中的第一个,因此可以执行以下操作:

matchingEmployee[0].food = b 

当我了解到列表会生成一个列表(听起来可能很愚蠢:),我添加了一个for循环来迭代匹配的员工列表,以便将三明治提供给想要的人

if matchingEmployee:
print 'Employee(s) found'

for o in matchingEmployee:
    o.food = b

谢谢

因为我知道列表会生成一个列表(听起来可能很愚蠢:)。我添加了一个for循环来迭代匹配的员工列表,以便将三明治提供给想要的人

if matchingEmployee:
print 'Employee(s) found'

for o in matchingEmployee:
    o.food = b

谢谢

如果您想将食物添加到与您的筛选器匹配的每个员工,您需要循环查看匹配的员工列表。 例如:

for employee in matchingEmployee:
    employee.food = b

如果您想将食物添加到与您的筛选器匹配的每个员工,则需要循环查看匹配的员工列表。 例如:

for employee in matchingEmployee:
    employee.food = b

使用命令行python编写简化表达式:

[ y for y in [1,2,3,4] if y %2 ==0]
您将看到它将产生一个列表输出

[2, 4]
您的“匹配员工”实际上是匹配员工的列表。因此,给第一个找到的员工“一个三明治”(假设有):

给员工名单上的“一个三明治”:

for employee in matchingEmployee:
    employee.food = b

使用命令行python编写简化表达式:

[ y for y in [1,2,3,4] if y %2 ==0]
您将看到它将产生一个列表输出

[2, 4]
您的“匹配员工”实际上是匹配员工的列表。因此,给第一个找到的员工“一个三明治”(假设有):

给员工名单上的“一个三明治”:

for employee in matchingEmployee:
    employee.food = b

matchingEmployee
是匹配的
Employee
对象列表,而不是单个对象。这就是为什么它被称为列表理解;它将创建一个列表。感谢您的输入。您能否建议如何只返回一个结果。
matchingEmployee
是匹配的
Employee
对象列表,而不是单个对象。这就是为什么它被称为列表理解;它将创建一个列表。感谢您的输入。你能告诉我如何只返回一个结果吗?谢谢。这是可行的,但假设只有一个结果,我认为情况并非总是如此,它假设至少有一个结果。这是py列表上的一张小备忘单:谢谢。这是可行的,但假设只有一个结果,我认为情况并非总是如此,它假设至少有一个结果。这是py列表上的一张小备忘单:字面上比我快15秒,字面上比我快15秒。