Hướng dẫn get size of nested dictionary python - lấy kích thước của python từ điển lồng nhau

Tôi có từ điển với định dạng sau:

Mã demo:

>>> import pprint
>>> pprint.pprint(data)
{'lookup': {'F01': '\n.custom1 {\n    background-color: #f5e9dc;\n    padding: 10px;\n    border-radius: 10px;\n    font-family: sans-serif;\n    font-size: 0.9em;\n    margin-top: 1em;\n    }\n.custom2 .style8-rw {\n    font-family: sans-serif;\n    font-weight: bold;\n    color: #F57215;\n    }',
            'F02': '\n.custom1 {\n    background-color: #f5e9dc;\n    padding: 10px;\n    border-radius: 10px;\n    font-family: sans-serif;\n    font-size: 0.9em;\n    margin-top: 1em;\n    }\n.custom2 .style8-rw {\n    font-family: sans-serif;\n    font-weight: bold;\n    color: #F57215;\n    }',
            'F03': '\n.custom1 {\n    background-color: #f5e9dc;\n    padding: 10px;\n    border-radius: 10px;\n    font-family: sans-serif;\n    font-size: 0.9em;\n    margin-top: 1em;\n    }\n.custom2 .style8-rw {\n    font-family: sans-serif;\n    font-weight: bold;\n    color: #F57215;\n    }',
            'F04': '\n.custom1 {\n    background-color: #f5e9dc;\n    padding: 10px;\n    border-radius: 10px;\n    font-family: sans-serif;\n    font-size: 0.9em;\n    margin-top: 1em;\n    }\n.custom2 .style8-rw {\n    font-family: sans-serif;\n    font-weight: bold;\n    color: #F57215;\n    }',
            'F05': '\n.custom1 {\n    background-color: #f5e9dc;\n    padding: 10px;\n    border-radius: 10px;\n    font-family: sans-serif;\n    font-size: 0.9em;\n    margin-top: 1em;\n    }\n.custom2 .style8-rw {\n    font-family: sans-serif;\n    font-weight: bold;\n    color: #F57215;\n    }',
            'F06': '\n.custom1 {\n    background-color: #f5e9dc;\n    padding: 10px;\n    border-radius: 10px;\n    font-family: sans-serif;\n    font-size: 0.9em;\n    margin-top: 1em;\n    }\n.custom2 .style8-rw {\n    font-family: sans-serif;\n    font-weight: bold;\n    color: #F57215;\n    }',
            'F07': '\n.custom1 {\n    background-color: #f5e9dc;\n    padding: 10px;\n    border-radius: 10px;\n    font-family: sans-serif;\n    font-size: 0.9em;\n    margin-top: 1em;\n    }\n.custom2 .style8-rw {\n    font-family: sans-serif;\n    font-weight: bold;\n    color: #F57215;\n    }',
            'F08': '\n.custom1 {\n    background-color: #f5e9dc;\n    padding: 10px;\n    border-radius: 10px;\n    font-family: sans-serif;\n    font-size: 0.9em;\n    margin-top: 1em;\n    }\n.custom2 .style8-rw {\n    font-family: sans-serif;\n    font-weight: bold;\n    color: #F57215;\n    }',
            'F09': '\n.custom1 {\n    background-color: #f5e9dc;\n    padding: 10px;\n    border-radius: 10px;\n    font-family: sans-serif;\n    font-size: 0.9em;\n    margin-top: 1em;\n    }\n.custom2 .style8-rw {\n    font-family: sans-serif;\n    font-weight: bold;\n    color: #F57215;\n    }',
            'F10': '\n.custom1 {\n    background-color: #f5e9dc;\n    padding: 10px;\n    border-radius: 10px;\n    font-family: sans-serif;\n    font-size: 0.9em;\n    margin-top: 1em;\n    }\n.custom2 .style8-rw {\n    font-family: sans-serif;\n    font-weight: bold;\n    color: #F57215;\n    }',
            'F11': '\n.custom1 {\n    background-color: #f5e9dc;\n    padding: 10px;\n    border-radius: 10px;\n    font-family: sans-serif;\n    font-size: 0.9em;\n    margin-top: 1em;\n    }\n.custom2 .style8-rw {\n    font-family: sans-serif;\n    font-weight: bold;\n    color: #F57215;\n    }',
            'F12': '\n.custom1 {\n    background-color: #f5e9dc;\n    padding: 10px;\n    border-radius: 10px;\n    font-family: sans-serif;\n    font-size: 0.9em;\n    margin-top: 1em;\n    }\n.custom2 .style8-rw {\n    font-family: sans-serif;\n    font-weight: bold;\n    color: #F57215;\n    }'},
 'sequence': ['F01',
              'F02',
              'F03',
              'F04',
              'F05',
              'F06',
              'F07',
              'F08',
              'F09',
              'F10',
              'F11',
              'F12']}
>>> import sys
>>> sys.getsizeof(data)
136
>>> sys.getsizeof(data["sequence"])
80
>>> sys.getsizeof(data["lookup"])
520
>>> 

Tôi không thể có được cách lưu trữ từ điển trong bộ nhớ vì kích thước nếu data là 136 byte và kích thước ____10 là 80 byte và kích thước của

>>> data_str = str(data)
>>> sys.getsizeof(data_str)
3587
1 là 520 byte.

Ngoài ra, khi tôi thực hiện việc đúc dữ liệu biến từ

>>> data_str = str(data)
>>> sys.getsizeof(data_str)
3587
2 đến
>>> data_str = str(data)
>>> sys.getsizeof(data_str)
3587
3 thì kích thước của biến chuỗi là
>>> data_str = str(data)
>>> sys.getsizeof(data_str)
3587
4.

Mã demo:

>>> data_str = str(data)
>>> sys.getsizeof(data_str)
3587

Có thể giải thích cho tôi tại sao?

Giới thiệu

Trong bài viết này, chúng ta sẽ xem xét cách tìm kích thước của một từ điển trong Python.

Kích thước từ điển có thể có nghĩa là chiều dài của nó, hoặc không gian nó chiếm trong bộ nhớ. Để tìm số lượng các phần tử được lưu trữ trong từ điển, chúng ta có thể sử dụng hàm

>>> data_str = str(data)
>>> sys.getsizeof(data_str)
3587
5.

Để tìm kích thước của một từ điển trong byte, chúng ta có thể sử dụng hàm

>>> data_str = str(data)
>>> sys.getsizeof(data_str)
3587
6 của mô -đun
>>> data_str = str(data)
>>> sys.getsizeof(data_str)
3587
7.

Để đếm các yếu tố của từ điển lồng nhau, chúng ta có thể sử dụng hàm đệ quy.

Tìm kích thước của từ điển

Hàm

>>> data_str = str(data)
>>> sys.getsizeof(data_str)
3587
5 được sử dụng rộng rãi để xác định kích thước của các đối tượng trong Python. Trong trường hợp của chúng tôi, việc chuyển một đối tượng từ điển cho hàm này sẽ trả về kích thước của từ điển, tức là số lượng các cặp giá trị khóa có trong từ điển.

Bởi vì các đối tượng này theo dõi độ dài của chúng, hoạt động này có độ phức tạp thời gian O (1):

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

Đoạn trích trên trả về đầu ra này:

The length of the dictionary is 2

Tìm kích thước của từ điển trong byte

Kích thước bộ nhớ của đối tượng từ điển trong byte có thể được xác định bởi hàm

>>> data_str = str(data)
>>> sys.getsizeof(data_str)
3587
6. Hàm này có sẵn từ mô -đun
>>> data_str = str(data)
>>> sys.getsizeof(data_str)
3587
7. Giống như
>>> data_str = str(data)
>>> sys.getsizeof(data_str)
3587
5, nó có thể được sử dụng để tìm kích thước của bất kỳ đối tượng Python nào.

Điều này đặc biệt hữu ích khi chúng ta cần mã cần phải thực hiện và/hoặc yêu cầu giám sát thường xuyên. Hãy lấy ví dụ trước của chúng tôi và có được kích thước từ điển tính bằng byte thay vì số lượng các phần tử:

import sys

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

Đầu ra kết quả là:

The size of the dictionary is 232 bytes

Tìm kích thước của từ điển lồng nhau

Một từ điển lồng nhau là một từ điển bên trong một từ điển, hoặc một từ điển với nhiều cấp độ của các cặp giá trị khóa. Những từ điển lồng nhau này giúp đơn giản hóa các cấu trúc phức tạp như phản hồi JSON từ API.

Chúng trông một cái gì đó dọc theo dòng của:

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

Sử dụng

>>> data_str = str(data)
>>> sys.getsizeof(data_str)
3587
5 để có được số lượng của tất cả các cặp có giá trị khóa sẽ không hoạt động vì nó chỉ cung cấp kích thước của đối tượng cho cấp độ đầu tiên của các phím. Để tìm số lượng của tất cả các khóa lồng nhau, chúng ta có thể viết một hàm đệ quy tùy chỉnh để đếm các khóa. Hàm này sẽ lấy một từ điển và một bộ đếm làm đối số và lặp lại thông qua từng khóa.

Đối với mỗi lần lặp, chức năng kiểm tra xem ví dụ của khóa được xem xét là từ điển. Nếu đó là sự thật, hàm được gọi lại một lần nữa bằng cách nối lại biến bộ đếm vào

my_dict = {1: "a", 2: "b"}
print("The length of the dictionary is {}".format(len(my_dict)))
3 và truyền từ điển theo đánh giá làm đối số.

Hàm đệ quy này thoát ra khi lặp hoàn chỉnh, trả về độ dài của từ điển là biến:

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

Kiểm tra hướng dẫn thực hành của chúng tôi, thực tế để học Git, với các thực hành tốt nhất, các tiêu chuẩn được công nghiệp chấp nhận và bao gồm bảng gian lận. Ngừng các lệnh git googling và thực sự tìm hiểu nó!

Nếu khóa không phải là một thể hiện từ điển, bộ đếm chỉ được thêm vào

my_dict = {1: "a", 2: "b"}
print("The length of the dictionary is {}".format(len(my_dict)))
3. Hàm trả về giá trị
my_dict = {1: "a", 2: "b"}
print("The length of the dictionary is {}".format(len(my_dict)))
4 do kết quả của phép lặp mang lại kích thước của từ điển đang được đánh giá.

Do đó, số lượng của các phím lồng nhau được đánh giá bằng cách sử dụng chức năng này như được hiển thị bên dưới:

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)))

Và khi đoạn trích được thực thi, chúng tôi sẽ nhận được đầu ra sau tương ứng với số lượng khóa có trong từ điển:

The length of the nested dictionary is 8

Sự kết luận

Trong bài viết này, chúng tôi đã khám phá các phương pháp để tính toán kích thước và độ dài của từ điển và từ điển lồng nhau.

Các chức năng này có thể rất hữu ích trong việc phục vụ các đối tượng JSON trên API: có những giới hạn được áp đặt bởi các máy chủ cho kích thước của các đối tượng JSON được phục vụ trên API và các chức năng này có thể được sử dụng để kiểm tra độ dài và kích thước.

Độ dài của một từ điển trong Python là bao nhiêu?

Sự mô tả.Phương thức từ điển Python Len () cho tổng chiều dài của từ điển.Điều này sẽ bằng với số lượng các mục trong từ điển.len() gives the total length of the dictionary. This would be equal to the number of items in the dictionary.

Điều gì được đặt hàng trong Python?

Lệnh của Python là một lớp con Dict bảo tồn thứ tự trong đó các cặp giá trị khóa, thường được gọi là các mục, được đưa vào từ điển.Khi bạn lặp lại một đối tượng đặt hàng, các mục được đi qua theo thứ tự ban đầu.Nếu bạn cập nhật giá trị của một khóa hiện có, thì thứ tự vẫn không thay đổi.a dict subclass that preserves the order in which key-value pairs, commonly known as items, are inserted into the dictionary. When you iterate over an OrderedDict object, items are traversed in the original order. If you update the value of an existing key, then the order remains unchanged.

Từ điển Python sử dụng bao nhiêu bộ nhớ?

Đối tượng từ điển này chiếm 232 byte theo Sys.getizeof.Đây thực sự là kích thước của bộ nhớ trực tiếp được quy cho từ điển.Khi chúng tôi muốn truy cập phần tử với khóa A, chúng tôi sẽ cần dịch (băm) đầu tiên là một chỉ mục dựa trên 0 mà Python có thể sử dụng để truy xuất phần tử.232 bytes according to sys. getsizeof . This is actually the size of memory directly attributed to the dictionary. When we want to access the element with key a , we will need to first translate (hash) the key a into a 0-based index that Python can use to retrieve the element.