Python
 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'
}

  1. Python辞書をリストに変換する方法は?

    Pythonの辞書クラスには、この目的のために3つのメソッドがあります。メソッドitems()、keys()、values()は、それぞれキーと値のペアのタプル、キーのみ、値のみで構成されるビューオブジェクトを返します。組み込みのlistメソッドは、これらのビューオブジェクトをリストオブジェクトに変換します。 >>> d1 = {name: Ravi, age: 23, marks: 56} >>> d1.items() dict_items([(name, Ravi), (age, 23), (marks, 56)]) >>> l1 =

  2. Pythonで文字列を辞書に変換する方法は?

    ここでast.literal_eval()を使用して、文字列をPython式として評価できます。式ノードまたはPython式を含む文字列を安全に評価します。提供される文字列またはノードは、文字列、数値、タプル、リスト、dict、ブール値、およびなしのPythonリテラル構造のみで構成されます。例:  >>>import ast >>>x = ast.literal_eval("{'foo' : 'bar', 'hello' : 'world'}") >>