Python: obtener el tamaño del diccionario

En este artículo, aprenderá cómo obtener el tamaño de un diccionario de Python por longitud de pares clave-valor y por tamaño en bytes, con ejemplos.

Introducción

En este artículo, veremos cómo encontrar el tamaño de un diccionario en Python.

El tamaño del diccionario puede significar su longitud o el espacio que ocupa en la memoria. Para encontrar el número de elementos almacenados en un diccionario podemos usar la función len().

Para encontrar el tamaño de un diccionario en bytes podemos usar la función getsizeof() del módulo sys.

Para contar los elementos de un diccionario anidado, podemos usar una función recursiva.

Hallar el tamaño del diccionario

La función len() se usa ampliamente para determinar el tamaño de los objetos en Python. En nuestro caso, pasar un objeto de diccionario a esta función devolverá el tamaño del diccionario, es decir, el número de pares clave-valor presentes en el diccionario.

Debido a que estos objetos realizan un seguimiento de su longitud, esta operación tiene una complejidad de tiempo O(1):

1
2
my_dict = {1: "a", 2: "b"}
print("The length of the dictionary is {}".format(len(my_dict)))

El fragmento anterior devuelve este resultado:

1
The length of the dictionary is 2

Encontrar el tamaño del diccionario en bytes {#encontrar el tamaño del diccionario en bytes}

El tamaño de la memoria del objeto del diccionario en bytes se puede determinar mediante la función getsizeof(). Esta función está disponible desde el módulo sys. Al igual que len(), se puede usar para encontrar el tamaño de cualquier objeto de Python.

Esto es particularmente útil cuando necesitamos un código que debe tener un buen rendimiento y/o requiere un monitoreo regular. Tomemos nuestro ejemplo anterior y obtengamos el tamaño de un diccionario en bytes en lugar de la cantidad de elementos:

1
2
3
4
import sys

my_dict = {1: "a", 2: "b"}
print("The size of the dictionary is {} bytes".format(sys.getsizeof(my_dict)))

La salida resultante es:

1
The size of the dictionary is 232 bytes

Encontrar el tamaño de los diccionarios anidados

Un diccionario anidado es un diccionario dentro de un diccionario o un diccionario con varios niveles de pares clave-valor. Estos diccionarios anidados ayudan a simplificar estructuras complejas como las respuestas JSON de las API.

Estos se ven algo así como:

1
{"dict1": {"dict2": "value 1"}}

El uso de len() para obtener el recuento de todos los pares clave-valor no funcionará, ya que proporciona el tamaño del objeto solo para el primer nivel de claves. Para encontrar el número de todas las claves anidadas, podemos escribir una función recursiva personalizada para contar las claves. Esta función tomaría un diccionario y un contador como argumentos e iteraría a través de cada clave.

Para cada iteración, la función verifica si la instancia de la clave en consideración es un diccionario. Si es cierto, la función se vuelve a llamar recursivamente agregando la variable contador a contador+1 y pasando el diccionario bajo evaluación como argumentos.

Esta función recursiva sale de la iteración completa, devolviendo la longitud del diccionario como la variable: contador.

Si la clave no es una instancia de diccionario, el contador simplemente se agrega a contador+1. La función devuelve el valor del contador como resultado de la iteración que da el tamaño del diccionario bajo evaluación.

Por lo tanto, el conteo de claves anidadas se evalúa usando esta función como se muestra a continuación:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
def count_keys(dict_, counter=0):
    for each_key in dict_:
        if isinstance(dict_[each_key], dict):
            # Recursive call
            counter = count_keys(dict_[each_key], counter + 1)
        else:
            counter += 1
    return counter

my_dict = {
       'Name':
           {
               'first_name': 'Sherlock',
               'Last_name': 'Holmes'
           },
       'Locality':
           {
           'Address':
               {
                   'Street': '221B Baker Street'
               },
           'City': 'London',
           'Country': 'United Kingdom'
           }
      }

print('The length of the nested dictionary is {}'.format(count_keys(my_dict)))

Y cuando se ejecuta el fragmento, obtenemos el siguiente resultado correspondiente a la cantidad de claves presentes en el diccionario:

1
The length of the nested dictionary is 8

Conclusión

En este artículo, hemos explorado los métodos para calcular el tamaño y la longitud de los diccionarios y los diccionarios anidados.

Estas funciones pueden ser muy útiles para servir objetos JSON a través de API: existen límites impuestos por los servidores web para el tamaño de los objetos JSON servidos a través de API y estas funciones se pueden usar para mantener la longitud y el tamaño bajo control.

Licensed under CC BY-NC-SA 4.0