从Python中列表全面搜索访问对象

时间:2016-09-27 14:20:27

标签: python

我正在使用列表全面的“搜索”来匹配我的员工类的对象。然后我想根据匹配搜索的人为他们分配一个值。

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

这位有效

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。

任何帮助都会受到极大的欢迎。

4 个答案:

答案 0 :(得分:2)

我已经了解到列表全面产生了一个列表(这可能听起来很愚蠢:))我已经添加了一个for循环来迭代匹配的雇员列表,以便将三明治提供给任何想要它的人。

INSendPaymentIntent

由于

答案 1 :(得分:0)

由于变量matchingEmployee是一个列表,并且在给定的上下文中,Kate是列表中的第一个,你可以这样做:

matchingEmployee[0].food = b 

答案 2 :(得分:0)

如果您想向符合您的过滤条件的每位员工追加食物,您需要遍历匹配的员工列表。 例如:

for employee in matchingEmployee:
    employee.food = b

答案 3 :(得分:0)

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

[ y for y in [1,2,3,4] if y %2 ==0]

您将看到它会产生列表输出

[2, 4]

您的"匹配的员工"实际上是匹配员工的列表。所以要#34;给三明治"找到第一个员工(假设有一个):

matchingEmployee[0].food = b

To"给三明治"到员工名单:

for employee in matchingEmployee:
    employee.food = b