En Python, ¿cuándo usar un diccionario, lista o conjunto?

¿Cuándo debo usar un diccionario, lista o conjunto?

¿Existen escenarios más adecuados para cada tipo de datos?

Related of "En Python, ¿cuándo usar un diccionario, lista o conjunto?"

Una list mantiene el orden, dict y set que no: cuando te importa el orden, por lo tanto, debes usar la list (si la elección de los contenedores está limitada a estos tres, por supuesto ;-).

dict asocia a cada clave un valor, mientras que la list y el set solo contienen valores: casos de uso muy diferentes, obviamente.

set requiere que los elementos sean hashable, list no: si tiene elementos no hashable, por lo tanto, no puede usar set y debe usar la list .

set prohíbe duplicados, list no: también una distinción crucial. (Un “conjunto múltiple”, que asigna duplicados en un conteo diferente para los elementos presentes más de una vez, se puede encontrar en collections.Counter . collections.Counter : puede crear uno como un dict , si por alguna extraña razón no puede importar collections , o , en Python pre-2.7 como collections.defaultdict(int) , utilizando los elementos como claves y el valor asociado como recuento).

La verificación de la pertenencia a un valor en un set (o dict , para las claves) es increíblemente rápida (toma alrededor de una constante, poco tiempo), mientras que en una lista lleva tiempo proporcional a la longitud de la lista en el promedio y en el peor de los casos. Por lo tanto, si tiene elementos hashable, no le importa el orden ni los duplicados, y desea una rápida verificación de la membresía, set es mejor que list .

  • ¿Necesitas una secuencia ordenada de artículos? Ir a por una lista
  • ¿Necesita saber si ya tiene o no un valor en particular, pero sin realizar un pedido (y no necesita almacenar duplicados)? Utilice un conjunto.
  • ¿Necesita asociar valores con claves, para poder buscarlas de manera eficiente (por clave) más adelante? Usa un diccionario.
  • Use un diccionario cuando tenga un conjunto de claves únicas que se asignen a valores.

  • Use una lista si tiene una colección ordenada de artículos.

  • Utilice un conjunto para almacenar un conjunto desordenado de elementos.

Cuando desee una colección desordenada de elementos únicos, use un set . (Por ejemplo, cuando desea el conjunto de todas las palabras utilizadas en un documento).

Cuando desee recostackr una lista ordenada de elementos inmutables, utilice una tuple . (Por ejemplo, cuando desea un par (nombre, número de teléfono) que desea usar como elemento en un conjunto, necesitará una tupla en lugar de una lista, ya que los conjuntos requieren elementos son inmutables).

Cuando desee recostackr una lista ordenada de elementos mutables, utilice una list . (Por ejemplo, cuando desea agregar nuevos números de teléfono a una lista: [número1, número2, …]).

Cuando desee una asignación de claves a valores, use un dict . (Por ejemplo, cuando desea una guía telefónica que asigne nombres a números de teléfono: {'John Smith' : '555-1212'} ). Tenga en cuenta que las teclas en un dict están desordenadas. (Si recorre un dictado (guía telefónica), las teclas (nombres) pueden aparecer en cualquier orden).

Aunque esto no cubre los set s, es una buena explicación de los dict y la list s:

Las listas son lo que parecen – una lista de valores. Cada uno de ellos está numerado, comenzando desde cero; el primero tiene un número cero, el segundo 1, el tercero 2, etc. Puede eliminar valores de la lista y agregar nuevos valores al final. Ejemplo: los nombres de tus muchos gatos.

Los diccionarios son similares a lo que sugiere su nombre: un diccionario. En un diccionario, tiene un ‘índice’ de palabras, y para cada una de ellas una definición. En Python, la palabra se llama “clave” y la definición de “valor”. Los valores de un diccionario no están numerados, por lo que son similares a lo que sugiere su nombre: un diccionario. En un diccionario, tiene un ‘índice’ de palabras, y para cada una de ellas una definición. Los valores de un diccionario no están numerados, tampoco están en ningún orden específico, la clave hace lo mismo. Puede agregar, eliminar y modificar los valores en los diccionarios. Ejemplo: guía telefónica.

http://www.sthurlow.com/python/lesson06/

Cuando los uso, hago una hoja de trucos exhaustiva de sus métodos para su referencia:

 class ContainerMethods: def __init__(self): self.list_methods_11 = { 'Add':{'append','extend','insert'}, 'Subtract':{'pop','remove'}, 'Sort':{'reverse', 'sort'}, 'Search':{'count', 'index'}, 'Entire':{'clear','copy'}, } self.tuple_methods_2 = {'Search':'count','index'} self.dict_methods_11 = { 'Views':{'keys', 'values', 'items'}, 'Add':{'update'}, 'Subtract':{'pop', 'popitem',}, 'Extract':{'get','setdefault',}, 'Entire':{ 'clear', 'copy','fromkeys'}, } self.set_methods_17 ={ 'Add':{['add', 'update'],['difference_update','symmetric_difference_update','intersection_update']}, 'Subtract':{'pop', 'remove','discard'}, 'Relation':{'isdisjoint', 'issubset', 'issuperset'}, 'operation':{'union' 'intersection','difference', 'symmetric_difference'} 'Entire':{'clear', 'copy'}} 

Las listas son lo que parecen – una lista de valores. Cada uno de ellos está numerado, comenzando desde cero; el primero tiene un número cero, el segundo 1, el tercero 2, etc. Puede eliminar valores de la lista y agregar nuevos valores al final. Ejemplo: los nombres de tus muchos gatos.

Las tuplas son como listas, pero no puedes cambiar sus valores. Los valores que le asignas primero, son los valores con los que estás atascado durante el rest del progtwig. Nuevamente, cada valor se numera comenzando desde cero, para una referencia fácil. Ejemplo: los nombres de los meses del año.

Los diccionarios son similares a lo que sugiere su nombre: un diccionario. En un diccionario, tiene un ‘índice’ de palabras, y para cada una de ellas una definición. En Python, la palabra se llama “clave” y la definición de “valor”. Los valores de un diccionario no están numerados, por lo que son similares a lo que sugiere su nombre: un diccionario. En un diccionario, tiene un ‘índice’ de palabras, y para cada una de ellas una definición. En Python, la palabra se llama “clave” y la definición de “valor”. Los valores de un diccionario no están numerados, tampoco están en ningún orden específico, la clave hace lo mismo. Puede agregar, eliminar y modificar los valores en los diccionarios. Ejemplo: guía telefónica.

En combinación con listas , dictados y conjuntos , también hay otros objetos interesantes de python, OrderedDicts .

Los diccionarios ordenados son como los diccionarios normales, pero recuerdan el orden en que se insertaron los elementos. Al recorrer un diccionario ordenado, los elementos se devuelven en el orden en que se agregaron las claves por primera vez.

OrderedDicts podría ser útil cuando necesita conservar el orden de las claves, por ejemplo, trabajar con documentos: es común que necesite la representación vectorial de todos los términos en un documento. Por lo tanto, utilizando OrderedDicts puede verificar de manera eficiente si un término se ha leído antes, agregar términos, extraer términos y, después de todas las manipulaciones, puede extraer la representación vectorial ordenada de ellos.

Para C ++ siempre tuve en mente este diagtwig de flujo: ¿ En qué escenario utilizo un contenedor STL particular? , así que tenía curiosidad por saber si hay algo similar disponible para Python3 también, pero no tuve suerte.

Lo que debe tener en cuenta para Python es: No hay un estándar único de Python como para C ++. Por lo tanto, puede haber grandes diferencias para los diferentes intérpretes de Python (por ejemplo, CPython, PyPy). El siguiente diagtwig de flujo es para CPython.

Además, no encontré una buena forma de incorporar las siguientes estructuras de datos en el diagtwig: bytes , byte arrays , tuples , named_tuples , ChainMap , Counter y arrays .

  • OrderedDict y deque están disponibles a través del módulo de collections .
  • heapq está disponible desde el módulo heapq
  • LifoQueue , Queue y PriorityQueue están disponibles a través del módulo de queue que está diseñado para el acceso simultáneo (subprocesos). (También hay un multiprocessing.Queue disponible, pero no conozco las diferencias en la queue.Queue pero supondría que debería usarse cuando se necesita acceso simultáneo desde los procesos).
  • dict , set , frozen_set y list están incorporados, por supuesto,

Para cualquier persona, le agradecería si pudiera mejorar esta respuesta y proporcionar un mejor diagtwig en cada aspecto. Siéntete libre y bienvenido. diagrama de flujo

PD: el diagtwig se ha hecho con yed. El archivo graphml está aquí