# Nutzung einer minimalistischen Klasse ohne Attribute/Methoden als
# Daten-Container

# StringIO gestattet es, Strings wie Dateien zu lesen und zu schreiben
from io import StringIO

# operator-Funktion für den Attributzugriff importieren
from operator import attrgetter

# unsere minimalistische Klasse
class data(object):
    pass

# Text-Datendatei mit zeilenweisen Personenangaben; alternativ kann man die
# Daten in einer externen Textdatei ablegen
persons = '''
Anton Meier 1972
Barbara Lämmel 1961
Annerose Lehmann 1954
'''

# eine Liste als Container von data-Objekten
person_list = []

# die Text-Daten einlesen und die Personenliste aufbauen
for line in StringIO(persons):
    line = line.strip()
    if line:
        # data-Objekt erzeugen
        pers = data()
        # 3 Attribute von außen setzen
        pers.firstname, pers.name, pers.year = line.split()[:3]
        # das Jahr in eine ganze Zahl konvertieren
        pers.year = int(pers.year)
        # an die Personenliste anhängen
        person_list.append(pers)

# Funktion zur Ausgabe einer Personenliste
def print_list(pers_list):
    for pers in pers_list:
        print(f'{pers.year:4} {pers.name}, {pers.firstname}')

# die Personenliste aufsteigend sortiert nach dem Jahr ausgeben
print_list(sorted(person_list, key=lambda x: x.year))

print()

# analog mit attrgetter() statt lambda
print_list(sorted(person_list, key=attrgetter('year')))

print()

# nur jene Personen ausgeben, deren Jahr kleiner als 1970 ist
print_list(sorted((pers for pers in person_list if pers.year < 1970), key=attrgetter('year')))
