umgedrehtes dictionary

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
pr0stAta
User
Beiträge: 271
Registriert: Freitag 17. September 2004, 11:49
Wohnort: Bremen

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
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
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

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
[code]#!/usr/bin/env python
import this[/code]
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

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)
Zuletzt geändert von Milan am Dienstag 12. Oktober 2004, 14:12, insgesamt 2-mal geändert.
pr0stAta
User
Beiträge: 271
Registriert: Freitag 17. September 2004, 11:49
Wohnort: Bremen

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
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

hab meins nochmal editiert :wink: jaja, ich hab ne direkte Verbindung zum Suchindex der Database in meinem Kopf :lol:
Antworten