Qual è l'oggetto preferito per memorizzare questo tipo di struttura dati

1

Ero in una conversazione con qualcuno che codifica per me. Era frustrato dal mio approccio a un particolare problema. Sono completamente autodidatta e molto pragmatico - non sono uno sviluppatore professionista, ma a volte scrivo codice per fare qualcosa e poi glielo passo per ripulirlo - renderlo solido ecc.

Stiamo leggendo in file txt di grandi dimensioni che utilizzano i tag sgml per contrassegnare i confini tra i singoli documenti correlati tra loro.

<opentagfor txt file>
<document>
<maybe some attribute tags of the document>
the
document
could be a uuencoded
could be html
or something else
can tell what type by the attribute tags
</document>
<anotherdocument>
<maybe some attribute tags of the another document>
the
document itself
could be a uuencoded
could be html
or something else
can tell what type by the attribute tags
</anotherdocument>
 .
 .
 .

 <closetagfor txt file>

I singoli documenti vengono consumati a valle. A volte vengono scritti su una struttura di file per l'indicizzazione, altre volte alcuni dei loro contenuti vengono estratti e salvati come "dati".

Quindi il mio approccio era di creare un dizionario di dizionari.

 document_dictionary = {document_position_index:{attribute-tag-1:value1,attribute-tag-2:value2,document:the\n    document itself\n    could be a uuencoded\n    could be html\n   or something else \n  can tell what type by the attribute tags}, . . .}

document_position_index è la posizione dell'indice del documento nel file sorgente txt originale - non ha alcun significato rilevante.

ora se voglio fare qualcosa con i documenti posso fare cose come

for document in document_dictionary
    if document['some-attribute-tag'] == someValue:
        do something

Il problema è che questa cattiva codifica (in particolare l'utilizzo di un intero (document_position_index)) era frustrante per il mio sviluppatore. Ha detto che è una cattiva forma. Ancora dopo aver cercato su Google per un po 'non capisco. Quindi apprezzerei sia una spiegazione migliore che poi ho preso da lui o qualche puntatore nella giusta direzione.

È questo il tipo di domanda che dovrebbe essere posta qui?

    
posta PyNEwbie 07.09.2013 - 18:17
fonte

2 risposte

1

Perché non salvarlo in una lista? Hai ancora informazioni sulla posizione di quale numero è il documento. Il tuo utilizzo sarà esattamente lo stesso. E non devi preoccuparti di sovraccaricare l'uso di un dizionario e salvare il tuo indice. E continuerai a salvarli con i numeri 1,2,3,4, ecc.

    
risposta data 07.09.2013 - 20:34
fonte
1

Ci sono diversi modi per accedere ai dati e le tue esigenze di accesso dovrebbero dettare quale formato utilizzare. In questo momento, con un dizionario di dizionari, se vuoi trovare l'ennesimo documento, devi fare una ricerca lineare attraverso il dizionario esterno per trovare quello con l'indice che vuoi, mentre con un array, sarebbe una singola ricerca .

Tuttavia, se i dati posizionali non vengono normalmente utilizzati e potresti inserire altri documenti in questa struttura, l'utilizzo di un array o di un elenco potrebbe non essere altrettanto utile e potrebbe rallentare l'accesso ai dati che desideri. In tal caso, un dizionario potrebbe essere una scelta migliore.

Puoi imparare di più su come le diverse strutture di dati influenzano l'uso della memoria e la velocità di esecuzione di vari algoritmi cercando la complessità dello spazio o complessità temporale . Alcune strutture semplificano l'aggiunta e la rimozione di elementi, mentre altre rendono più veloce la ricerca di elementi. Quindi la migliore dipende dalle operazioni che farai di più.

    
risposta data 07.02.2017 - 05:34
fonte

Leggi altre domande sui tag