Verständnisproblem

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Marcel1993
User
Beiträge: 1
Registriert: Dienstag 10. März 2020, 09:06

Guten Tag,

ich bin neu hier im Forum und würde euch gerne um Rat fragen.

Kurz zu mir bin 26Jahre alt, Elektrotechnikmeister für Automatisierungstechnik und seit nun einem halben Jahr auch nebenberuflicher Student der technischen Informatik (staatliche Hochschule).
Unteranderem ist dieses Semester Programmieren 1 dran, was bisher gut läuft und Spaß macht, jedoch verzweifle ich an einer kleinen Verständnissache.

Zum eigentlichen Problem:
Schreiben Sie eine Funktion reverseDict, die ein dict-Objekt "umkehrt", d.h. alle Schlüssel zu Werten und alle Werte zu den entsprechenden Schlüsseln macht.
Hier der Code dazu:

def reverseDict(d):
erg = dict()
for key in d:
erg[d[key]] = key //Bitte zu dieser Zeile eine Erklärung
return erg

Wenn ich nun ein dict angelegt habe mit dem Namen d funktioniert dies auch aber diese eine Codezeile ist mir absolut unverständlich.
Sorry für die blöde Frage jedoch sitz ich hier seit 2 Stunden und ich raff es einfach nicht.

Danke und freundliche Grüße
__deets__
User
Beiträge: 14541
Registriert: Mittwoch 14. Oktober 2015, 14:29

Beantworte dir mal folgende beiden Fragen:

Was macht

Code: Alles auswählen

wert = d[key]
Und was macht

Code: Alles auswählen

erg[schluessel] = wert
Und wenn du eingedenk deiner Aufgabe mal ueber die Namen der Bezeichner und was du tun sollst sinnierst, dann kommst du hoffentlich drauf.
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

Zur weiteren Information: Wörterbücher haben eine items-Methode, damit wird die for-Schleife verständlicher:

Code: Alles auswählen

def reverse_dict(woerterbuch):
    ergebnis = dict()
    for key, value in woerterbuch.items():
        ergebnis[value] = key
return ergbnis
Benutze keine Abkürzungen.
Kompakter wird das mit einer dict-Comprehension

Code: Alles auswählen

def reverse_dict(woerterbuch):
    return {value: key for key, value in woerterbuch.items()}
bb1898
User
Beiträge: 200
Registriert: Mittwoch 12. Juli 2006, 14:28

Und schon in der Aufgabenstellung wird wortlos vorausgesetzt, dass kein Wert im Dictionary mehrmals vorkommt - was ja keineswegs selbstverständlich ist.
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

@bb1898: damit ist eine Umkehrung möglich, sie ist nur nicht mehr eindeutig. Was viel schwerwiegender ist, sind Werte, die man nicht als Schlüssel verwenden kann.
bb1898
User
Beiträge: 200
Registriert: Mittwoch 12. Juli 2006, 14:28

Sirius3 hat geschrieben: Dienstag 10. März 2020, 21:00 @bb1898: damit ist eine Umkehrung möglich, sie ist nur nicht mehr eindeutig.
Was genau meinst Du mit "nicht mehr eindeutig"? Bei den vorgeführten Lösungen würden für gleiche Werte alle Schlüssel bis auf den letzten wegfallen, sie würden überschrieben. Die Alternative wären Schlüssel-Listen als Werte im umgekehrten Dictionary.
Was viel schwerwiegender ist, sind Werte, die man nicht als Schlüssel verwenden kann.
Stimmt allerdings.
__deets__
User
Beiträge: 14541
Registriert: Mittwoch 14. Oktober 2015, 14:29

Na wenn zwei Schlüssel auf den gleichen Wert zeigen, ist die Abbildung umgekehrt eben nicht mehr eindeutig. Das KANN ein Problem sein, muss es aber nicht - hängt vom Problem ab. Und ob eine Liste dann die Lösung ist eben auch.
Antworten