ho i seguenti tre corde (che esistono indipendentemente ma vengono visualizzate qui insieme per comodità):Posso fidarmi dell'ordinanza di un dict di rimanere uguale ogni volta che viene ripetuto?
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
Sto cercando di compilare un dict con alcuni valori basati sul invertita (basso verso l'alto) ordine di le stringhe. In particolare, per ogni stringa, sto estraendo l'indirizzo IP come indice di ordinamento e quindi la stringa completa come valore.
Dato che l'ordine è importante, ho deciso di andare con le liste, e inizialmente ha fatto qualcosa di simile (pseudocodice, con il gruppo al di sopra del testo):
IPs =[]
fullStrings =[]
for string in strings:
IPs.append[$theIpAddressFoundInTheString]
fullstrings.append[$theWholeString]
risultato i seguenti due liste (di nuovo, solo un esempio):
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']
Ciò ha funzionato benissimo fino ad un certo punto, ma ora mentre inizio popolare un dict con i valori in queste liste (a indici hardcoded), confrontandoli valori di altre liste (nuovamente a har indici codificati) ecc., non solo il debug diventa un dolore, il codice diventa insostenibile.
Sto iniziando a riscrivere utilizzando un dict (restituendo un dict in cui gli indirizzi IP sono le chiavi e le stringhe complete sono i valori). Allora io eseguire operazioni quali:
for k,v in myDictOfIpsAndStrings:
anotherDict[$someHardcodedText] = k
anotherDict[$otherHardcodedText] = v
Ecco la mia preoccupazione: posso essere sicuro che il dict, ogni volta che viene iterato sopra, sarà sempre fatto nell'ordine in cui è stato creato il dict? In caso contrario, è la mia unica opzione per tornare agli elenchi (e il noioso e fragile confronto lunghezza, le assegnazioni inerenti a farlo), ecc?
So che un ditt è, per sua stessa natura, non ordinato. E so della funzione sorted
, ma non sto cercando di ordinare le chiavi in base a qualsiasi ordine discendente/ascendente, ecc. Piuttosto si tratta di mantenere (in qualche modo) l'ordine in cui è stato creato il dict.
usare un 'collections.OrderedDict'! – Ryan
La tua domanda non è chiara. Che ordine ti aspetti di preservare? L'ordine in cui hai inserito gli elementi? O l'ordine in cui si esegue l'iterazione per non cambiare quando si itera più di una volta? Non c'è conservazione dell'ordine di inserimento, ma una volta che hai un dizionario, l'ordine rimane stabile fino a quando non inserisci più chiavi (o cancella le chiavi). –
@minitech Grazie. La documentazione https://docs.python.org/2/library/collections.html#collections.OrderedDict contiene la riga "Novità nella versione 2.7", ma è sepolta nel mezzo della descrizione. Dovrei leggerlo come OrderedDict è nuovo in 2.7, o solo il metodo popitem() è nuovo? – Pyderman