Você pode ver a página em https://under-linux.org/content.php?...rios-ou-Listas
Você pode ver a página em https://under-linux.org/content.php?...rios-ou-Listas
Você está fazendo o teste buscando valores em listas, e nos dicionários está fazendo por índices, o que não é uma comparação justa ao meu ver.
Deveria ser buscado por valores no dicionário da mesma forma que nas listas, neste caso o tempo seria aproximadamente o mesmo pois dicionários nada mais são do que listas indexadas ao estilo hash table, ou então fazer as buscas por índices nas listas também (neste caso nas listas seriam mais rapido).
Listas e Dicionários são estruturas de dados bem diferentes e para propósitos diferentes, normalmente dicionários são utilizados para algo como o próprio nome sujere, armazenar valores relativos a chave enquanto listas são para armazenar vários de objetos. Um exemplo simples é a própria implementação da orientação a objetos em python, onde cada objeto é na verdade um dicionário com sua chave atrelada á 'métodos' e 'atributos'.
A um grosso modo dicionários podem ser comparados com 'estruturas' do C e listas com 'vetores' ou 'matrizes' (mas bem mais semelhante o tipo 'List' implementado em C++).
Se a idéia é persistir estruturas serializáveis, além do pickle você pode utilizar o módulo struct que serializa valores da mesma forma que estruturas são armazenadas em arquivos em C, normalmente utilizado para compatibilidade com aplicativos escritos em outras linguagens, comunicação com dispositivos ou sockets. E poderia representar estas estruturas em python como dicionários ou classes.
Outra alternativa seria utilizar banco de dados embarcados como o sqlite que já vem junto com o python na maioria das distribuições.
Sim, não é justa. Como eu falei, essa diferença ocorre somente porque a busca por índices no dicionário está implementada na linguagem. Talvez meu texto não tenha ficado claro, mas minha intenção era mostrar que, ao contrário do que eu esperava, a busca através de iteração na lista é bem rápida.Você está fazendo o teste buscando valores em listas, e nos dicionários está fazendo por índices, o que não é uma comparação justa ao meu ver.
Se você observar a forma como estruturei a lista, vai perceber que não há como realizar busca na lista utilizando o método index.Deveria ser buscado por valores no dicionário da mesma forma que nas listas, neste caso o tempo seria aproximadamente o mesmo pois dicionários nada mais são do que listas indexadas ao estilo hash table, ou então fazer as buscas por índices nas listas também (neste caso nas listas seriam mais rapido).
Concordo plenamente, mas uma vez que temos diversos objetos nos servindo devemos analisar qual deles mais atende uma dada necessidade. Foi por isso que escrevi esse artigo, visando mostrar que os dicionários são uma ótima solução, desde que sua aplicação não vá rodar em plataformas com pouca memória.Listas e Dicionários são estruturas de dados bem diferentes e para propósitos diferentes, normalmente dicionários são utilizados para algo como o próprio nome sujere, armazenar valores relativos a chave enquanto listas são para armazenar vários de objetos. Um exemplo simples é a própria implementação da orientação a objetos em python, onde cada objeto é na verdade um dicionário com sua chave atrelada á 'métodos' e 'atributos'.
Antes de trabalhar da forma apresentada acima, eu testei o armazenamento de objetos usando o shelve o pickle, mas eles apresentaram uma deficiência. Se eu vier a necessitar adicionar ou remover atributos desse objeto toda a minha base armazenada torna-se inválida. Por isso optei por armazenar em dicionários ou listas. Quanto ao struct, eu o desconhecia, muito obrigado pela dica, vou estudá-lo.A um grosso modo dicionários podem ser comparados com 'estruturas' do C e listas com 'vetores' ou 'matrizes' (mas bem mais semelhante o tipo 'List' implementado em C++).
Se a idéia é persistir estruturas serializáveis, além do pickle você pode utilizar o módulo struct que serializa valores da mesma forma que estruturas são armazenadas em arquivos em C, normalmente utilizado para compatibilidade com aplicativos escritos em outras linguagens, comunicação com dispositivos ou sockets. E poderia representar estas estruturas em python como dicionários ou classes.
Como eu disse no início, eu não quero ter que usar um banco de dados para uma coisa tão simples. Foi o que eu disse no texto, a solução do listas e dicionários atende bem até 2000 ítens. Para valores muito grandes seria mais sensato usar um banco de dados, mas minha aplicação não ai chegar a isso.Outra alternativa seria utilizar banco de dados embarcados como o sqlite que já vem junto com o python na maioria das distribuições.
Mas você me deu uma boa idéia de como melhorar as buscas nas listas. Vou escrever um outro artigo sobre isso. Se quiser me ajudar, toda ajuda é bem vinda!
Até mais...