Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python 중첩 사전을 평평한 사전으로 변환 하시겠습니까?

<시간/>

세상이 더 많은 비정형 데이터를 수용함에 따라 데이터 구조가 중첩된 JSON과 같이 깊이 중첩될 수 있는 다양한 형식의 데이터를 접하게 됩니다. Python은 내부 키를 외부 키와 연결하여 데이터를 평면화함으로써 중첩 데이터 구조를 처리하는 기능이 있습니다. 이 기사에서는 중첩된 사전을 가져와서 병합합니다.

재귀적 접근 사용

이 접근 방식에서 우리는 사전의 각 항목을 재귀적으로 처리하는 함수를 설계합니다. 사전을 전달하고 출력 사전에 대한 자리 표시자, 키 및 구분 기호를 매개변수로 디자인합니다. isinstance를 사용하여 다음 항목 자체가 사전인지 확인한 다음 사전일 경우 재귀 호출을 통해 전달합니다.

예시

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)

출력

위의 코드를 실행하면 다음과 같은 결과가 나옵니다. -

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

체리피커 사용

사전을 입력받아 직접 사용할 수 있는 모듈입니다. 기본 구분 기호는 -.

입니다.

예시

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

출력

위의 코드를 실행하면 다음과 같은 결과가 나옵니다. -

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