Módulo de Colecciones de Python: Contador, ChainMap, Deque y Tuple

Publicado: 2020-12-01

El módulo Colecciones de Python ofrece un conjunto de tipos de datos de contenedores que amplían las características de los contenedores de valores como listas, tuplas, conjuntos y diccionarios. Con estos contenedores especiales, no solo tiene las características de los contenedores de stock, sino también algunos métodos adicionales que son muy útiles para ciertas tareas.

Al final de este tutorial, tendrá el conocimiento de lo siguiente:

  • ¿Qué es el módulo de colecciones?
  • Varias funciones como:
  1. Encimera
  2. CadenaMapa
  3. Deque
  4. Tupla con nombre
  • Ejemplos de trabajo

El módulo Colecciones viene preinstalado en Python, por lo que no es necesario que lo instalemos. ¡Podemos importarlo y ya está listo para comenzar! Vamos a entrar en detalle en las funciones más utilizadas.

Aprende ciencia de datos de las mejores universidades del mundo. Obtenga programas Executive PG, programas de certificados avanzados o programas de maestría para acelerar su carrera.

Debe leer: Fascinantes aplicaciones de Python en el mundo real

Tabla de contenido

Encimera

El Contador es fácilmente la función más utilizada y más útil en el módulo Colecciones. Counter es una subclase de la clase de diccionario en Python. Cuenta el número de ocurrencias de cada elemento en un iterable (como cadenas, tuplas, listas, etc.) y lo almacena en un diccionario. Las claves del diccionario son los elementos únicos en el iterable y los valores son los recuentos de esos elementos.

Probémoslo con algunos ejemplos.

Importar colecciones
Marvel = 'Bad Wolverine intimidado al pobre Iron Man Bad Wolverine pobre pobre Iron Man'
Marvel_count = colecciones.Contador(Marvel.split())

#Producción:
Contador({ 'Malo' : 3 ,
'Hierro' : 2 ,
'Hombre' : 2 ,
'Pobre' : 2 ,
'Lobezno' : 2 ,
'acosado' : 1 })

Como vemos, contó las ocurrencias de cada elemento y las puso en un diccionario. Esto se puede utilizar en cualquier tipo de iterable. Ahora veamos todos los métodos que tiene.

Marvel_count[ 'Malo' ]
#>> 3

Marvel_count.valores()
#>> valores_dict([3, 2, 1, 2, 2, 2])

Marvel_count.keys()
#>> dict_keys(['Malo', 'Lobezno', 'acosado', 'Iron', 'Hombre', 'Pobre'])

El método most_common(n) devuelve una lista de los n elementos más comunes dispuestos en orden descendente de conteo.

Marvel_count.más_común( 2 )
#>> [('Malo', 3), ('Lobezno', 2)]

CadenaMapa

ChainMap se utiliza para crear una vista única de muchos diccionarios, de modo que se pueda acceder a ellos y actualizarlos desde la vista única, es decir, el propio objeto ChainMap. Tenga en cuenta que estos ChainMaps solo consisten en las referencias a los diccionarios reales y la actualización también se realiza en los diccionarios reales.

ChainMap es una extensión de la clase de diccionario, por lo que se admiten todos los métodos de diccionario, además de algunos métodos adicionales que repasaremos.

dic1 = { 'a' : 1 , 'b' : 2 }
dic2 = { 'b' : 3 , 'c' : 4 } dic3 = { 'b' : 9 , 'd' : 4 }
cadena1 = colecciones.ChainMap(dic2, dic1)
cadena1

En el código anterior, definimos dos diccionarios dic1 y dic2 y los colocamos en un objeto ChainMap.

#Producción:
MapaCadena({ 'b' : 3 , 'c' : 4 }, { 'a' : 1 , 'b' : 2 })

Como vemos, dic2 está 'encadenado' con dic1 en este mismo orden. En esencia, puede imaginarse que dic2 está conectado a dic1 como dic2–>dic1. Entonces, cuando buscamos la clave 'b', primero buscará en el primer mapeo que es dic2 y si no se encuentra la clave, irá a los siguientes mapeos.

Por lo tanto, el orden del ChainMap es importante para determinar qué mapeo se busca primero. Veamos eso en acción.

cadena1[ 'b' ]
#>> 3

Como vemos arriba, ChainMap tiene la clave 'b' en ambos diccionarios. Entonces, cuando buscamos la clave 'b', busca en el primer mapeo que es dic2 y devuelve el valor.

atributo de mapas

El atributo de mapas ChainMap devuelve una lista de asignaciones en el orden de búsqueda, es decir, dic2 es el primero en el mapa, por lo que se buscará primero y así sucesivamente.

cadena1.mapas
#>> [{'b': 3, 'c': 4}, {'a': 1, 'b': 2}]

Del mismo modo, podemos verificar claves y valores:

lista(cadena1.teclas())
#>> ['a', 'c', 'b']

lista(cadena1.valores())
#>> [1, 4, 3]

Como vemos, solo se muestran las claves únicas y los valores también.

nuevo_niño(m=Ninguno)

El método new_child() se usa para agregar nuevos mapas al ChainMap. Este método devuelve un nuevo ChainMap con el nuevo mapa como primer mapa seguido del resto de mapas. Si se especifica m, se convierte en el primer mapa; de lo contrario, se agrega un diccionario vacío como primer mapa.

cadena1.nuevo_niño(dic3)
cadena1.mapas

#Producción:
[{ 'b' : 9 , 'd' : 4 }, { 'b' : 3 , 'c' : 4 }, { 'a' : 1 , 'b' : 2 }]

Como vemos, agregó el dic3 al principio y devolvió un nuevo objeto ChainMap.

invertido

Quizás se pregunte cómo puede cambiar el orden del ChainMap. Eso se puede lograr usando la función invertida que devuelve un iterador para iterar a través de ChainMap en la dirección inversa. Veamos esto en acción.

La tecla 'b' está ahora en todos los mapas. El primer mapa en ChainMap tiene la clave 'b' con valor 9.

cadena1[ 'b' ]
#>> 9

Veamos qué sucede una vez que iteramos en la dirección inversa.

cadena1.mapas = invertido(cadena1.mapas)
cadena1[ 'b' ]
#>> 2

Tenga en cuenta que la función invertida en realidad no invierte el mapeo, solo proporciona un iterador inverso.

Leer: Tutorial de Python

Deque

Deque (pronunciado como 'deck' ) es una extensión de listas, pero de dos extremos. Deque significa: Double Ended Queue porque podemos eliminar/popear y agregar elementos en cualquier extremo de Deques de manera eficiente, a diferencia de las listas donde todas las operaciones están en el lado derecho.

deque(iterable, maxlen) toma iterables y devuelve objetos deque. También tienen un parámetro maxlen que decide el límite superior del número de elementos. Si no se especifica, deque puede crecer indefinidamente. Echemos un vistazo a sus métodos rápidos.

deq = colecciones.deque([ 1 , 2 , 3 , 4 , 5 ], maxlen= 6 )
deq.appendleft( 8 )

#Producción:
deque([ 8 , 1 , 2 , 3 , 4 , 5 ])

Como vemos, llamar al método appendleft agregó el elemento en el extremo izquierdo. Además, como lo habíamos inicializado con maxlen como 6, que ha alcanzado ahora, agregar otro elemento generará "StopIterationError".

Entonces, eliminemos el elemento más a la izquierda usando popleft :

deq.popleft()
#>> 8

También podemos eliminar un elemento específico por valor usando eliminar:

deq.remove( 5 )
#>> deque([1, 2, 3, 4])

Nota: llamar al método remove con un elemento que no está en el deque arrojará un "ValueError".

Podemos insertar cualquier elemento en el índice especificado usando insert(index, element) .

deq.insertar( 2 , 7 )
#>> deque([1, 2, 7, 3, 4])

Deque se puede revertir llamando al método inverso .

deq.reversa()
#>> deque([4, 3, 7, 2, 1])


Deque también se puede girar en sentido horario o antihorario utilizando el método de rotación .

#Agujas del relojdeq.rotar( 2 )#>> deque([2, 1, 4, 3, 7])

#Anti en el sentido de las agujas del relojdeq.rotar( -2 )#>> deque([4, 3, 7, 2, 1])

Tupla con nombre

namedtuple() es una gran mejora del objeto tupla habitual en Python. Las tuplas con nombre nos permiten indexar elementos por sus nombres en lugar de solo por posiciones. Puede pensar en las tuplas con nombre como tablas con el nombre de la tabla como el nombre de la tupla y los nombres de las columnas como los nombres del índice. Named Tuple esencialmente asigna significado a cada elemento para un acceso más fácil y un código más legible.

Tomemos algunos ejemplos y comprendamos cómo funciona.

Rendimiento = colecciones.namedtuple( 'Employee_Rating' , [ 'Q1' , 'Q2' , 'Q3' , 'Q4' ])

En el código anterior, definimos un objeto de tupla con nombre "Rendimiento" de nombre "Employee_Rating" con nombres de campo como "Q1", "Q2", "Q3" y "Q4" que almacenarán las calificaciones trimestrales de los empleados. Hagamos 2 entradas de tupla con nombre de Employee_Rating.

Raul = rendimiento ( 3 , 4 , 3,5 , 4,5 )
kit = rendimiento ( 4 , 4,5 , 4 , 4,5 )

#Producción:
Calificación_empleado(Q1= 4 , Q2= 4.5 , Q3= 4 , Q4= 4.5 )
Calificación_empleado(Q1= 3 , Q2= 4 , Q3= 3.5 , Q4= 4.5 )


Ahora que hemos creado 2 entradas, podemos acceder a ellas por nombres de índice.

ankit.Q1
#>> 4

ankit.Q3 > rahul.Q3
#>> Verdadero


Para agregar nuevas entradas, o crear nuevos objetos de tupla con nombre, podemos usar el método _make() .

Milkha = Rendimiento._make([ 4 , 5 , 5 , 4.5 ])
Milkha

#Producción:
Calificación_empleado(Q1= 4 , Q2= 5 , Q3= 5 , Q4= 4.5 )

Podemos editar los elementos usando el método _replace en cualquier tupla con nombre.

rahul._replace(Q1= 2 )

#Producción:
Calificación_empleado(Q1= 2 , Q2= 4 , Q3= 3.5 , Q4= 4.5 )

Antes de que te vayas

El módulo Colecciones tiene algunas funciones más útiles, como OrderedDict, defaultdict, UserList, UserString, UserDict. Asegúrese de tener algunas manos en las funciones que discutimos en este tutorial. Estos tipos de contenedores no solo le facilitan la vida, sino que también mejoran la calidad del código que escribe.

Si tiene curiosidad por aprender sobre python, ciencia de datos, consulte el Programa PG ejecutivo en ciencia de datos de IIIT-B y upGrad, que se creó para profesionales que trabajan y ofrece más de 10 estudios de casos y proyectos, talleres prácticos prácticos, tutoría con expertos de la industria. , 1 a 1 con mentores de la industria, más de 400 horas de aprendizaje y asistencia laboral con las mejores empresas.

¿Qué es un módulo de colección y cómo es útil?

El módulo de colección de Python admite varios tipos de contenedores. Un contenedor es un objeto que se utiliza para almacenar varios elementos y proporciona los medios para recuperar e iterar sobre los objetos incluidos. Tuple, List, Dictionary y más contenedores integrados están disponibles. Además, el módulo Collections tiene tipos de datos de contenedores altamente especializados y eficientes, como namedtuple(), deque, OrderedDict, counter, etc., que son muy superiores a los contenedores estándar de Python.

¿Es el módulo de colección un tema necesario para Python?

Sí, el módulo de colección es un tema necesario mientras se aprende Python. Contar objetos, construir colas y pilas, administrar claves faltantes en diccionarios y más, todo es posible con el módulo de colecciones de Python. Los tipos de datos y las clases de las colecciones se crean para ser eficientes y Pythonic. Son bastante valiosos para su carrera de programación de Python, por lo que vale la pena dedicar su tiempo y esfuerzo a aprender sobre este módulo de colección. Los contenedores en el módulo Colecciones pueden ser bastante beneficiosos para proyectos y modelos de nivel empresarial, lo que aumenta significativamente la utilidad de los contenedores genéricos de Python a través de una mejor optimización y velocidad de ejecución.

¿Cuáles son los tipos de datos presentes en el módulo de recopilación?

Varios tipos de datos están presentes en el módulo de recopilación, como deque, defaultdict, namedtuple, OrderedDict, Counter, ChainMap, UserDict, UserList, UserString, etc. final de la secuencia, construyendo valores predeterminados para las claves faltantes y agregándolos automáticamente al diccionario. Estos tipos de datos también pueden ayudar al proporcionar campos con nombre que permiten acceder a los elementos por nombre mientras mantienen la capacidad de acceder a los elementos por índice, contar elementos únicos en una secuencia o iterables y tratar varias asignaciones como un solo objeto de diccionario, etc.