2016-09-27 3 views
0

Ich benutze eine Liste umfassende "Suche", um Objekte meiner Mitarbeiterklasse zu entsprechen. Ich möchte ihnen dann einen Wert zuweisen, basierend darauf, wer der Suche entspricht.Zugriff auf Objekt aus Liste umfassende Suche in Python

Grundsätzlich entspricht das Codeäquivalent der Frage, wer Sandwiches mag und dann dieser Person ein Sandwich gibt.

Dieses Bit funktioniert

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 

Diese Drucke 'Mitarbeiter Kate' aus der Klasse repr

Das Bit ich bin stecken jetzt schenkt Kate den Thunfisch Mayo Sandwich, Wert b.

Ich hatte gehofft, etwas zu tun, wie

matchingEmployee.food = b 

Aber es den Wert b nicht eine neue Variable in diesem Objekt erstellen und geben.

Jede Hilfe würde sehr erhalten werden.

+2

'matchingEmployee' ist ein * * Liste ** übereinstimmender 'Mitarbeiter'-Objekte, keine einzige. Deshalb nennt man es * Listenverständnis *; es erstellt eine Liste. – jonrsharpe

+0

Vielen Dank für Ihre Eingabe. Können Sie darauf hinweisen, wie Sie nur ein Ergebnis zurückgeben? – Spinnaay

+0

https://docs.python.org/2/tutorial/introduction.html#lists – jonrsharpe

Antwort

0

Wenn Sie Nahrung für jeden Mitarbeiter anhängen möchten, dass Ihre Filter abgestimmt Sie eine Schleife durch die matchingEmployee Liste bräuchten. Zum Beispiel:

for employee in matchingEmployee: 
    employee.food = b 
0

Da die Variable matchingEmployee eine Liste ist, und im gegebenen Zusammenhang ist Kate die erste in der Liste können Sie tun:

matchingEmployee[0].food = b 
+0

Danke. Das würde funktionieren, nimmt aber nur 1 Ergebnis an, was wohl nicht immer der Fall sein wird. – Spinnaay

+0

Es wird mindestens ein Ergebnis angenommen. Hier ein kleiner Spickzettel auf Py Listen: [https://developers.google.com/edu/python/lists](https://developers.google.com/edu/python/lists) –

1

Als ich gelernt habe, dass die Liste umfassende Liste erzeugt (dumm wie das klingen könnte :)) Ich habe eine for-Schleife hinzugefügt, um über die passenderEmployee-Liste zu iterieren, um das Sandwich zu geben, wer auch immer es will.

if matchingEmployee: 
print 'Employee(s) found' 

for o in matchingEmployee: 
    o.food = b 

Dank

+0

Wörtlich schlag mich um 15 Sekunden. – Hevlastka

+0

gut gemacht! mach weiter! –

+0

Ich gebe dir die Upvote. :) – Spinnaay

0

die Befehlszeile Python Verwenden Sie einen vereinfachten Ausdruck zu schreiben:

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

Sie werden sehen, dass es zu einer Liste Ausgabe

[2, 4] 

Ihre "matchingEmployee" ist eigentlich eine Liste der passenden Mitarbeiter. So zu "geben ein Sandwich" auf den ersten Mitarbeiter gefunden (vorausgesetzt, ist es eins):

matchingEmployee[0].food = b 

Um auf die Liste der Mitarbeiter "ein Sandwich geben":

for employee in matchingEmployee: 
    employee.food = b