Ich habe die folgenden drei Saiten (sie existieren unabhängig sind aber hier zusammen für Bequemlichkeit angezeigt):Kann ich darauf vertrauen, dass die Reihenfolge eines Diktats bei jeder Iteration gleich bleibt?
from mx2.x.org (mx2.x.org. [198.186.238.144])
by mx.google.com with ESMTPS id g34si6312040qgg.122.2015.04.22.14.49.15
(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
Wed, 22 Apr 2015 14:49:16 -0700 (PDT)
from HQPAMAIL08.x.org (10.64.17.33) by HQPAMAIL13.x.x.org
(10.34.25.11) with Microsoft SMTP Server (TLS) id 14.2.347.0; Wed, 22 Apr
2015 17:49:13 -0400
from HQPAMAIL13.x.org ([fe80::7844:1f34:e8b2:e526]) by
HQPAMAIL08.iadb.org ([fe80::20b5:b1cb:9c01:aa86%18]) with mapi id
14.02.0387.000; Wed, 22 Apr 2015 17:49:12 -0400
Ich suche eine dict zu füllen mit einigen auf dem umgekehrten Basis-Werte (unten nach oben), um von die Saiten. Genauer gesagt extrahiere ich für jede Zeichenfolge die IP-Adresse als einen Index der Arten und dann die vollständige Zeichenfolge als Wert.
Da wichtig ist, habe ich beschlossen, mit Listen zu gehen, und tat zunächst so etwas wie diese (Pseudo-Code, mit dem obenen Bündel von Text):
IPs =[]
fullStrings =[]
for string in strings:
IPs.append[$theIpAddressFoundInTheString]
fullstrings.append[$theWholeString]
in den folgenden zwei Listen resultierenden (wieder, nur eine Abbildung):
IPs ['198.186.238.144', '10.64.17.33', 'fe80::7844:1f34:e8b2:e526']
fullstrings ['from mx2.x.org (mx2.x.org. [198.186.238.144])
by mx.google.com with ESMTPS id g34si6312040qgg.122.2015.04.22.14.49.15
(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
Wed, 22 Apr 2015 14:49:16 -0700 (PDT)', 'from HQPAMAIL08.x.org (10.64.17.33) by HQPAMAIL13.x.x.org
(10.34.25.11) with Microsoft SMTP Server (TLS) id 14.2.347.0; Wed, 22 Apr
2015 17:49:13 -0400', 'from HQPAMAIL13.x.org ([fe80::7844:1f34:e8b2:e526]) by
HQPAMAIL08.x.org ([fe80::20b5:b1cb:9c01:aa86%18]) with mapi id
14.02.0387.000; Wed, 22 Apr 2015 17:49:12 -0400']
Diese feine, bis ein Punkt gearbeitet hat, aber jetzt, da ich in diesen Listen eine dict mit Werten beginnen bevölkern (bei fest codierten Indizes), gegen Werte in anderen Listen zu vergleichen (wieder bei Har dcoded indices), wird nicht nur das Debugging zu einem Problem, der Code wird nicht mehr nachhaltig.
Ich fange an, mit einem Diktat neu zu schreiben (Rückgabe eines Diktats, wo die IP-Adressen die Schlüssel sind und die vollständigen Zeichenfolgen die Werte sind). Dann werde ich Operationen wie ausführen:
for k,v in myDictOfIpsAndStrings:
anotherDict[$someHardcodedText] = k
anotherDict[$otherHardcodedText] = v
Hier ist meine Sorge: kann ich sicher sein, dass der dict, zu jeder Zeit es iteriert über, wird immer in der Reihenfolge durchgeführt werden, in dem die dict erstellt wurde? Wenn nicht, ist meine einzige Option, um wieder auf Listen (und die langwierigen und spröde Längenvergleiche, Zuweisungen inhärent, so zu tun) usw.?
Ich weiß, dass ein Diktat von Natur aus unsortiert ist. Und ich kenne die sorted
Funktion, aber ich suche nicht, sie nach absteigender/aufsteigender Reihenfolge usw. zu sortieren, sondern es geht darum, (irgendwie) die Reihenfolge beizubehalten, in der das Diktat erstellt wurde.
Verwenden nutzen zu können! – Ryan
Ihre Frage ist unklar. Welche Reihenfolge erwarten Sie zu bewahren? Die Reihenfolge, in der Sie Elemente eingefügt haben? Oder die Reihenfolge, in der Sie iterieren, um nicht zu ändern, wenn Sie mehr als einmal iterieren? Es gibt keine Beibehaltung der Einfügereihenfolge, aber sobald Sie ein Wörterbuch haben, bleibt die Reihenfolge stabil, bis Sie weitere Schlüssel einfügen (oder Schlüssel löschen). –
@minitech Vielen Dank. Die Dokumentation https://docs.python.org/2/library/collections.html#collections.OrderedDict enthält die Zeile "Neu in Version 2.7", aber sie ist in der Mitte der Beschreibung vergraben. Soll ich das lesen, wie OrderedDict in 2.7 neu ist, oder nur die popitem() Methode ist neu? – Pyderman