Dictionary umdrehen
Verfasst: Donnerstag 22. Juli 2021, 23:07
Hallo ich bin noch relativ neu in Python (und programmierung im allgemeinen) und komme mit folgender Aufgabe nicht so richtig klar:
Ich soll folgendes Dictionary umdrehen:
Ergebnis: {19: ['lisa', 'alexandra', 'nick'], 22: ['michael'], 23: ['zheng'], 26: ['theo']}
Ich hab auch eine "Lösung"... Ihr werdet vermutlich die Hände überm Kopf zusammenschlagen:
Meine Idee war:
Sich erst die Schlüssel zu besorgen, die auf den gleichen Value zeigen. Diese habe ich dann in "names" als Liste gespeichert.
Da meine 1. For-Schleife jedoch nicht sehr effizienz arbeitet muss danach die Liste "names" von doppelten Einträgen "bereinigt" werden.
Das ergebnis speichere ich dann in "bereinigt". Anschließend zippe ich das ganze zusammen und... Ach... Das ist einfach ein riesen Kuddelmuddel bei dem ich schon selber nicht mehr durchschaue..
Meine Ausgabe schaut nun jedenfalls so aus:
Ein grausames "Etwas" Aus Listen & Tupeln, welches ich nun nicht in in ein Dictionary umgewandelt bekomme...
... Und, wenn ich mir das ganze so anschaue eigentlich auch gar nicht mehr möchte.. Die Lösung ist einfach grausam anzusehen.. Das seh selbst ich als Anfänger...
Wie würdet ihr das ganze angehen?
Ich soll folgendes Dictionary umdrehen:
Code: Alles auswählen
alter = {
'lisa': 19,
'michael': 22,
'sebastian': 18,
'zheng': 23,
'theo': 26,
'alex': 19,
'nick': 19
}
Ich hab auch eine "Lösung"... Ihr werdet vermutlich die Hände überm Kopf zusammenschlagen:
Code: Alles auswählen
def dreheDic(d):
x = d.items()
values = list(d.values())
names = []
for i in d:
l = []
for j, k in x:
if k == d[i] and k not in names:
l.append(j)
names.append(l)
bereinigt = []
for i in names:
if i not in bereinigt:
bereinigt.append(i)
x = zip(bereinigt, values)
alter = []
namen = []
for i, j in x:
namen.append(i)
alter.append(j)
return(list(zip(namen,alter)))
print(dreheDic(alter))
Sich erst die Schlüssel zu besorgen, die auf den gleichen Value zeigen. Diese habe ich dann in "names" als Liste gespeichert.
Da meine 1. For-Schleife jedoch nicht sehr effizienz arbeitet muss danach die Liste "names" von doppelten Einträgen "bereinigt" werden.
Das ergebnis speichere ich dann in "bereinigt". Anschließend zippe ich das ganze zusammen und... Ach... Das ist einfach ein riesen Kuddelmuddel bei dem ich schon selber nicht mehr durchschaue..
Meine Ausgabe schaut nun jedenfalls so aus:
Code: Alles auswählen
[(['lisa', 'alex', 'nick'], 19), (['michael'], 22), (['sebastian'], 18), (['zheng'], 23), (['theo'], 26)]
... Und, wenn ich mir das ganze so anschaue eigentlich auch gar nicht mehr möchte.. Die Lösung ist einfach grausam anzusehen.. Das seh selbst ich als Anfänger...

Wie würdet ihr das ganze angehen?