Seite 1 von 1

umgedrehtes dictionary

Verfasst: Dienstag 12. Oktober 2004, 11:06
von pr0stAta
Huhu zusammen.
langsam wirds mir ja fast peinlich immer nachzufragen aber ich stecke
nun schon ewig an einen problem fest :/
beispiel:
habe ein dictionary was so aufgebaut ist:

Code: Alles auswählen

dic = { 'hallo':2, 'in':10, 'dort':1, 'wurst':2, 'wobei':1 }
der key wird nur einmal in dem dic angezeigt, wobei der value für
die tatsächliche anzahl dieser wörter in einem text steht.
nun soll das dic umgedreht werden in solch ein format:
dic = { '2': [hallo, wurst], '1': [dort, wobei] }
nun, ist so etwas überhaupt möglich? wenn nein, wie sonst? :D
freue mich über jede hilfe, alllerdings wären ansätze, wie ich an das problem rangehen soll hilfreicher anstatt lösungen zu posten, da ich es gerne selber schaffen möchte :>
mfg prosta

Re: umgedrehtes dictionary

Verfasst: Dienstag 12. Oktober 2004, 11:21
von joe
Hallo!
pr0stAta hat geschrieben:alllerdings wären ansätze, wie ich an das problem rangehen soll hilfreicher anstatt lösungen zu posten, da ich es gerne selber schaffen möchte :>
Lobenswert! Macht mir aber zuviel arbeit. Deswegen ein fertige lösung. Aber das verstehen einer fertigen lösung ist ja auch nicht immer so ganz ohne.

Code: Alles auswählen

dic = { 'hallo':2, 'in':10, 'dort':1, 'wurst':2, 'wobei':1 } 
newDic = {}
for item in dic.items():
    newDic[item[1]] = [item[0]] + newDic.get(item[1],[])
joe

Verfasst: Dienstag 12. Oktober 2004, 12:57
von Dookie
Hi,

so viel Arbeit ist das auch wieder nicht.

1. ein neues Dictionary erzeugen.
2. Das Dictionary in eine Liste mit den Schlüssel/Werte-Paaren wandeln. Das geht am einfachsten mit dict.items() oder dict.iteritems()
3. über die Liste mit den Schlüssel/Werte-Paaren iterieren und das neue Dictionary anhand der Werte/Schlüssel aufbauen, dabei darauf achten, daß als Werte des neuen Dicts Listen mit den Schlüsseln erzeugt werden. Also neue Schlüssel an schon gespeicherte angehängt werden.


Gruß

Dookie

Verfasst: Dienstag 12. Oktober 2004, 13:38
von Milan
Hi. Jo, so in etwa. Lösungsansätze und Umsetzungen findeste diesmal auch in den Codesnippets reichlich :wink:, wobei die leider nicht ganz dem entsprechen was du willst. Aber ich würde den Ansatz mehr in Richtung iteratoren und Listenmethoden abwandeln, dadurch wird er in den kommenden Pythonversionen viel schneller laufen, da gerade in dieser Richtung optimiert wird. Der Unterschied bei großen Wortlisten ist, dass nicht so viele Objekte generiert werden und gleich darauf wieder aus dem Speicher gelöscht werden müssen., was bei den vielen Listen, die temporär erzeugt werden würden der Fall wäre.

Code: Alles auswählen

def reversedict(d={}):
    newDic = {}
    for key,value in d.iteritems():
        try:
            newDic[value].append(key)
        except KeyError:
            newDic[value] = [key]
    return newDic
dic = { 'hallo':2, 'in':10, 'dort':1, 'wurst':2, 'wobei':1 }
print reversedict(dic)

Verfasst: Dienstag 12. Oktober 2004, 13:45
von pr0stAta
wah und wieder zaubert milan ne seite her... ich suche irgendwie nach falschen sachen o_O
also danke euch allen dafür erstmal und naja... ich hab joe's lösung einfach
mal genommen und stimme ihm in diesem falle einfach mal zu, ich konnte
es durch seinen weg gut verstehen :)
danke nochmal allen

Verfasst: Dienstag 12. Oktober 2004, 13:55
von Milan
hab meins nochmal editiert :wink: jaja, ich hab ne direkte Verbindung zum Suchindex der Database in meinem Kopf :lol: