Aber wieso musst Du überhaupt die Namen auf die `Eintrag` Objekte abbilden? Du kannst doch auch gleich die Liste mit den `Eintrag` Objekten durchsuchen.
Einfaches Beispiel, das mit einer Adressenliste in der Telefonbuchklasse auskommt:
Code: Alles auswählen
class Entry(object):
def __init__(self, name, surname, phone):
self.name = name
self.surname = surname
self.phone = phone
def __str__(self):
return '%s, %s (%s)' % (self.surname, self.name, self.phone)
def __cmp__(self, other):
return cmp(self.surname, other.surname) or cmp(self.name, other.name)
class Phonebook(object):
def __init__(self):
self.addresses = list()
def __len__(self):
return len(self.addresses)
def __iter__(self):
return iter(self.addresses)
def __str__(self):
return '\n'.join(map(str, self))
def add(self, entry):
self.add_many([entry])
def add_many(self, entries):
self.addresses.extend(entries)
self.addresses.sort()
def search(self, string, fields=('surname',)):
result = list()
for entry in self:
for field in fields:
if string in getattr(entry, field):
result.append(entry)
break
return result
phonebook = Phonebook()
phonebook.add_many((Entry('Klaus', 'Meier', '123-1'),
Entry('Hans', 'Meier', '123-2'),
Entry('Klaus', 'Schulz', '456'),
Entry('Max', 'Mustermann', '983')))
print phonebook
print map(str, phonebook.search('Meier'))
print map(str, phonebook.search('Klaus', ['name']))
print map(str, phonebook.search('123', ['phone']))