Computer >> Máy Tính >  >> Lập trình >> Python

Python Chuyển đổi từ điển lồng nhau thành từ điển phẳng?

Khi thế giới đón nhận nhiều dữ liệu phi cấu trúc hơn, chúng ta bắt gặp nhiều định dạng dữ liệu trong đó cấu trúc dữ liệu có thể được lồng sâu vào nhau như JSONS lồng nhau. Python có khả năng xử lý cấu trúc dữ liệu lồng nhau bằng cách nối các khóa bên trong với các khóa bên ngoài để làm phẳng dữ liệu. Trong bài viết này, chúng tôi sẽ lấy một từ điển lồng nhau và làm phẳng nó.

Sử dụng phương pháp đệ quy

Trong cách tiếp cận này, chúng tôi thiết kế một hàm để xử lý đệ quy từng mục trong từ điển. Chúng tôi chuyển từ điển, thiết kế một trình giữ chỗ cho từ điển đầu ra, khóa và dấu phân tách dưới dạng các tham số. Chúng tôi sử dụng isinstance để kiểm tra xem bản thân mục tiếp theo có phải là một từ điển hay không và sau đó chuyển nó qua lệnh gọi đệ quy nếu nó cũng là một từ điển.

Ví dụ

dictA = {
   "id": "0001",
   "name": "hotdog",
   "image":
      {
         "url": "images/0001.jpg",

            "thumbnail":
               {
                  "url": "images/thumbnails/0001.jpg",
                  "height,width": "2x4"
               }
      }
}
def dict_flatten(in_dict, dict_out=None, parent_key=None, separator="_"):
   if dict_out is None:
      dict_out = {}

   for k, v in in_dict.items():
      k = f"{parent_key}{separator}{k}" if parent_key else k
      if isinstance(v, dict):
         dict_flatten(in_dict=v, dict_out=dict_out, parent_key=k)
         continue

      dict_out[k] = v

   return dict_out

final_dict = dict_flatten(dictA)
print(final_dict)

Đầu ra

Chạy đoạn mã trên cho chúng ta kết quả sau -

{
   'id': '0001',
   'name': 'hotdog',
   'image_url': 'images/0001.jpg',
   'image_thumbnail_url': 'images/thumbnails/0001.jpg',
   'image_thumbnail_height,width': '2x4'
}

Với cherrypicker

Đây là một mô-đun có thể được sử dụng trực tiếp bằng cách cung cấp cho nó từ điển làm đầu vào. Dấu phân tách mặc định là -.

Ví dụ

from cherrypicker import CherryPicker

dictA = {
   "id": "0001",
   "name": "hotdog",
   "image":
      {
         "url": "images/0001.jpg",

            "thumbnail":
               {
                  "url": "images/thumbnails/0001.jpg",
                  "height,width": "2x4"
               }
      }
}

picker = CherryPicker(dictA)
print(picker.flatten().get())

Đầu ra

Chạy đoạn mã trên cho chúng ta kết quả sau -

{
   'id': '0001',
   'name': 'hotdog',
   'image_url': 'images/0001.jpg',
   'image_thumbnail_url': 'images/thumbnails/0001.jpg',
   'image_thumbnail_height,width': '2x4'
}