Вступление
В этой статье мы рассмотрим, как узнать размер словаря в Python .
Размер словаря может означать его длину или место, которое он занимает в
памяти. Чтобы найти количество элементов, хранящихся в словаре, мы можем
использовать функцию len()
Чтобы узнать размер словаря в байтах, мы можем использовать
getsizeof()
модуля sys
Чтобы подсчитать элементы вложенного словаря, мы можем использовать рекурсивную функцию.
Определение размера словаря
Функция len()
широко используется для определения размера объектов в
Python. В нашем случае передача объекта словаря этой функции вернет
размер словаря, то есть количество пар ключ-значение, присутствующих в
словаре.
Поскольку эти объекты отслеживают свою длину, эта операция имеет временную сложность O (1):
my_dict = {1: "a", 2: "b"}
print("The length of the dictionary is {}".format(len(my_dict)))
Приведенный выше фрагмент возвращает следующий результат:
The length of the dictionary is 2
Определение размера словаря в байтах
Размер памяти объекта словаря в байтах можно определить с помощью
функции getsizeof()
. Эта функция доступна из модуля sys
Как и
len()
, его можно использовать для определения размера любого объекта
Python.
Это особенно полезно, когда нам нужен код, который должен быть эффективным и / или требует регулярного мониторинга. Давайте возьмем наш предыдущий пример и получим размер словаря в байтах вместо количества элементов:
import sys
my_dict = {1: "a", 2: "b"}
print("The size of the dictionary is {} bytes".format(sys.getsizeof(my_dict)))
Результат:
The size of the dictionary is 232 bytes
Определение размера вложенных словарей
Вложенный словарь - это словарь внутри словаря или словарь с несколькими уровнями пар ключ-значение. Эти вложенные словари помогают упростить сложные структуры, такие как ответы JSON от API.
Они выглядят примерно так:
{"dict1": {"dict2": "value 1"}}
Использование len()
для подсчета всех пар ключ-значение не сработает,
поскольку дает размер объекта только для первого уровня ключей. Чтобы
найти количество всех вложенных ключей, мы можем написать специальную
рекурсивную функцию для подсчета ключей. Эта функция принимает словарь и
счетчик в качестве аргументов и выполняет итерацию по каждому ключу.
Для каждой итерации функция проверяет, является ли рассматриваемый
экземпляр ключа словарем. Если это правда, функция снова рекурсивно
вызывается путем добавления переменной counter+1
и передачи
оцениваемого словаря в качестве аргументов.
Эта рекурсивная функция завершается после полной итерации, возвращая
длину словаря как переменную: counter
.
Если ключ не является экземпляром словаря, счетчик просто добавляется к
counter+1
. Функция возвращает counter
в результате итерации,
которая дает размер оцениваемого словаря.
Следовательно, количество вложенных ключей оценивается с помощью этой функции, как показано ниже:
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)))
И когда фрагмент выполняется, мы получаем следующий вывод, соответствующий количеству ключей, присутствующих в словаре:
The length of the nested dictionary is 8
Заключение
В этой статье мы изучили методы расчета размера и длины словарей и вложенных словарей.
Эти функции могут быть очень полезны при обслуживании объектов JSON через API: существуют ограничения, налагаемые веб-серверами на размер объектов JSON, обслуживаемых через API, и эти функции могут использоваться для контроля длины и размера.