Seite 1 von 1

Geordneter Schlüssel - Wert speichern

Verfasst: Donnerstag 17. März 2011, 15:30
von nvidia
Hallo,
ich muss so etwas speichern:

Code: Alles auswählen

'1' : 'hallo'
'1.2.3.4.5.6' : 'huhu'
'1.2.3.4.7.8' : (5, 3, 'huhu')
'2.2' : 'Welt'
jetzt hab ich die werte der reihe nach als dict eingelesen, aber manche werden später nochmal verändert.
Dadurch ( nehm ich mal an ) entsteht dann eine ungeordnete Liste
Gibst da irgendwas geeigneteres oder ne leichte Möglichkeit, das nochmal nach zuordnen?

Re: Geordneter Schlüssel - Wert speichern

Verfasst: Donnerstag 17. März 2011, 15:39
von Lopt
Dictionarys sind ungeordnet, es gibt kein erstes oder zweites Element wie bei einer Liste.
Du kannst auch nicht auf das erste oder zweite zugreifen, du kannst nur mit dem Schlüssel zugreifen.

Vermutlich iterierst du durch die Schlüssel durch und bekommst da ungeordnet die Sachen heraus, das ist normal.

Eine Idee wäre für dich wäre

Code: Alles auswählen

MyKeys = MyDict.keys()
MyKeys.sort()
Dann hast du eine geordnete liste (MyKeys) mit den Schlüsseln des Dictionary.
Durch die geordnete Liste kannst du dann iterieren.

Edit: Ich weiß natürlich nicht, ob sort genau so sortiert, wie du es gern hättest -
ggf selbst eine Funktion schreiben die so sortiert

Re: Geordneter Schlüssel - Wert speichern

Verfasst: Donnerstag 17. März 2011, 15:48
von Rebecca
Neuderdings gibt's auche ein OrderedDict. :-)

Re: Geordneter Schlüssel - Wert speichern

Verfasst: Donnerstag 17. März 2011, 15:53
von DasIch
Das OrderedDict kann man allerdings nicht in-place sortieren, wordurch sortieren was den Speicherverbrauch angeht recht teuer wird.

Re: Geordneter Schlüssel - Wert speichern

Verfasst: Donnerstag 17. März 2011, 17:06
von Hyperion
Wo ich das Tupel da oben sehe: Hängt das mit diesem Thread zusammen? Wenn ja würde ich mal vorsichtig nachfragen, inwiefern diese Struktur zum einen semantisch und zum anderen syntaktisch vorgegeben ist? Sollte man da in der Wahl frei sein, so könnte man da vermutlich einen leichteren Weg in beider Hinsicht finden.

Re: Geordneter Schlüssel - Wert speichern

Verfasst: Donnerstag 17. März 2011, 18:19
von nvidia
Ja hängt damit zusammen,
ich versuche die Bodystructure einer Email zu parsen.

Code: Alles auswählen

Beispiel :
'(
	("TEXT" "PLAIN" ("CHARSET" "utf-8") NIL NIL "QUOTED-PRINTABLE" 871 27 NIL NIL NIL)
	(
		("TEXT" "HTML" ("CHARSET" "utf-8") NIL NIL "QUOTED-PRINTABLE" 2275 29 NIL NIL NIL)
		("APPLICATION" "VND.OASIS.OPENDOCUMENT.TEXT" ("NAME" "Ethische Problemfelder.odt") NIL NIL "BASE64" 875794 NIL ("ATTACHMENT" ("FILENAME" "Ethische Problemfelder.odt")) NIL)
		("TEXT" "HTML" ("CHARSET" "utf-8") NIL NIL "7BIT" 92 0 NIL NIL NIL) "MIXED" ("BOUNDARY" "Apple-Mail-4-784936864") NIL NIL
	) "ALTERNATIVE" ("BOUNDARY" "Apple-Mail-3-784936862") NIL NIL
)'

Code: Alles auswählen

würde jetzt bei mir werden zu :
{
'1' : [("TEXT","PLAIN",("CHARSET","utf-8"), None, None, "QUOTED-PRINTABLE" ,871 ,27 , None, None, None)]
'2' :  ["ALTERNATIVE",("BOUNDARY", "Apple-Mail-3-784936862") , None, None]
'2.1' : [("TEXT", "HTML", ("CHARSET", "utf-8"), None, None ,"QUOTED-PRINTABLE", 2275 ,29, None, None, None)]
'2.2' : [("APPLICATION" ,"VND.OASIS.OPENDOCUMENT.TEXT", ("NAME" "Ethische Problemfelder.odt"), None, None, "BASE64", 875794, None,  ("ATTACHMENT", ("FILENAME", "Ethische Problemfelder.odt")), None)]
'2.3' : [("TEXT", "HTML", ("CHARSET", "utf-8") , None, None, "7BIT", 92 ,0 , None, None, None), "MIXED" ,("BOUNDARY" ,"Apple-Mail-4-784936864") , None, None]
}
Und die Zahlen sind die Nummer, mit denen man die Teile sich abholen kann.
Ich muss jetzt da für jeden inhalt DER REIHE NACH überprüfen:
wenn der inhalt ein einziges tuple ist, dann ist es ein Teil des Körpers
wenn der inhalt nur list ist, dann ist es eine Gruppe und beinhaltet die Eigenschaften für die Gruppe
(Also Gruppe 2 ist eine Alternative für 1)
Ist das so gut, oder hättest du da einen besseren Weg um dahin zu kommen?

Re: Geordneter Schlüssel - Wert speichern

Verfasst: Donnerstag 17. März 2011, 18:54
von Leonidas
Was hast du da immer für komische Common Lisp-Datenstrukturen?

Re: Geordneter Schlüssel - Wert speichern

Verfasst: Donnerstag 17. März 2011, 19:07
von BlackJack
@nvidia: Das ist eine Baumstruktur, also könnte man die auch in eine Baumstruktur aus Objekten umwandeln und die mit den entsprechenden Methoden versehen um darüber zu traversieren.