Skip to main content

Converts an indented text or list of strings into a nested dictionary structure based on the indentation levels.

Project description

Converts an indented text or list of strings into a nested dictionary structure based on the indentation levels.

pip install indent2dict

Args:
	data (str, bytes, or list): The input data to be converted into a nested dictionary. It can be a string, bytes,
		or a list of strings.
	removespaces (bool): If True, leading and trailing whitespaces in the strings will be removed when constructing
		the dictionary keys. If False, whitespaces will be preserved.

Returns:
	dict: A nested dictionary structure where each level is determined by the indentation in the input data.
		The structure represents a hierarchy of items based on the indentation levels.

Example:
	input_data = [
		"Category 1",
		"  Subcategory 1.1",
		"    Item 1.1.1",
		"  Subcategory 1.2",
		"Category 2",
		"  Item 2.1",
	]

	result = indent2dict(input_data, removespaces=True)

	The 'result' will be:
	{
		'Category 1': {
			'Subcategory 1.1': {'Item 1.1.1': 0},
			'Subcategory 1.2': 1
		},
		'Category 2': {'Item 2.1':2}
	}


da2 = """      
      DecorView@479a814[HomeActivity]
        android.widget.LinearLayout{c7ad8bd V.E...... ......ID 0,0-1600,900}
          android.view.ViewStub{d860eb2 G.E...... ......I. 0,0-0,0 #102018a android:id/action_mode_bar_stub}
          android.widget.FrameLayout{a3aae03 V.E...... ......ID 0,0-1600,900 #1020002 android:id/content}
            android.widget.FrameLayout{5533180 V.E...... ......ID 0,0-1600,900}
              androidx.drawerlayout.widget.DrawerLayout{68143b9 VFE...... ......ID 0,36-1600,900 #7f0800af app:id/drawer_layout}
                com.bluestacks.launcher.widget.ItemOptionView{1c263fe VFED..... .F....ID 0,0-1600,864 #7f0800dd app:id/item_option}
                  androidx.constraintlayout.widget.ConstraintLayout{eb0275f V.E...... ......ID 0,0-1600,864}
                    android.widget.RelativeLayout{f79e5ac VFE...C.. ......ID 501,81-1100,130 #7f080133 app:id/searchRelativeLayout}
                      android.widget.ImageView{9e96275 V.ED..... ......ID 19,14-38,33 #7f080132 app:id/searchPlayIcon}
                      android.widget.ImageView{fdcc20a VFED..C.. ......ID 561,14-580,33 #7f080131 app:id/searchIcon}
                      android.widget.EditText{1d9da7b VFED..CL. ......ID 37,0-561,49 #7f080130 app:id/searchEditText}
                    com.bluestacks.launcher.widget.Desktop{75b098 VFED..... ......ID 44,166-1556,554 #7f08009c app:id/desktop}
                      com.bluestacks.launcher.widget.CellContainer{b7ab0f1 V.ED..... ......ID 0,0-1512,388}
                        d1.b{8cf4d6 VFED..CL. ........ 0,0-252,194}
                        d1.b{221a357 VFED..CL. ........ 252,0-504,194}
                        d1.b{4613e44 VFED..CL. ........ 504,0-756,194}
                        d1.b{af86b2d VFED..CL. ........ 756,0-1008,194}
                        d1.b{e3b8862 VFED..CL. ........ 1008,0-1260,194}
                        d1.b{25367c7 VFED..CL. ......I. 0,0-0,0}
                    com.bluestacks.launcher.widget.PagerIndicator{b31df3 I.ED..... ......ID 0,554-1600,570 #7f08009d app:id/desktopIndicator}
                    android.widget.LinearLayout{c55fab0 I.E...... ......ID 737,570-864,600 #7f0800d9 app:id/install_progress_layout}
                      android.widget.ProgressBar{71d8d29 V.ED..... ......ID 10,7-25,22 #7f0800ec app:id/loadingBar}
                      android.widget.TextView{f4dc8ae V.ED..... ......ID 35,4-117,25 #7f0800da app:id/installingGame}
                    android.widget.LinearLayout{bd7a64f V.E...... .......D 196,631-1404,864 #7f0800a5 app:id/dock}
                      android.widget.TextView{f9811dc V.ED..... ........ 0,9-1208,27 #7f080118 app:id/popular_gam}
                      android.widget.FrameLayout{558d2e5 V.E...... .......D 0,27-1208,233 #7f0800bb app:id/frameLayout}
                        android.view.View{931c1ba V.ED..... ......ID 0,90-1208,206 #7f08017b app:id/viewBackground}
                        android.widget.FrameLayout{312586b V.E...... .......D 0,0-1208,206}
                          android.widget.ProgressBar{3826fc8 G.ED..... ......I. 589,88-619,118 #7f0800a6 app:id/dockLoadingBar}
                          android.widget.LinearLayout{948b861 V.E...... .......D 62,-8-1146,182 #7f080048 app:id/allappsLinearLayout}
                            android.widget.LinearLayout{82a3f86 VFE...C.. .......D 66,0-225,190 #7f080050 app:id/appOneLinearLayout}
                              android.widget.FrameLayout{fc1047 V.E...... ......ID 29,34-129,134 #7f080058 app:id/app_image_one}
                                android.widget.ImageView{632c074 V.ED..... ......ID 74,3-97,26 #7f08011b app:id/popup_image_one}
                              android.widget.TextView{7f7799d V.ED..... ........ 0,142-159,190 #7f080060 app:id/app_name_one}
                            android.widget.LinearLayout{7dace12 VFE...C.. .......D 225,0-384,190 #7f080053 app:id/appTwoLinearLayout}
                              android.widget.FrameLayout{6df69e3 V.E...... ......ID 29,34-129,134 #7f08005b app:id/app_image_two}
                                android.widget.ImageView{7f56fe0 I.ED..... ......ID 74,3-97,26 #7f08011e app:id/popup_image_two}
                              android.widget.TextView{2d71299 V.ED..... ........ 0,142-159,190 #7f080063 app:id/app_name_two}
                            android.widget.LinearLayout{893b95e VFE...C.. .......D 384,0-543,190 #7f080052 app:id/appThreeLinearLayout}
                              android.widget.FrameLayout{614c13f V.E...... ......ID 29,34-129,134 #7f08005a app:id/app_image_three}
                                android.widget.ImageView{f71aa0c I.ED..... ......ID 74,3-97,26 #7f08011d app:id/popup_image_three}
                              android.widget.TextView{67d3f55 V.ED..... ........ 0,142-159,190 #7f080062 app:id/app_name_three}
                            android.widget.LinearLayout{d5e0d6a VFE...C.. .......D 543,0-702,190 #7f08004f app:id/appFourLinearLayout}
                              android.widget.FrameLayout{31e325b V.E...... ......ID 29,34-129,134 #7f080057 app:id/app_image_four}
                                android.widget.ImageView{4955af8 V.ED..... ......ID 74,3-97,26 #7f08011a app:id/popup_image_four}
                              android.widget.TextView{91f7bd1 V.ED..... ........ 0,142-159,190 #7f08005f app:id/app_name_four}
                            android.widget.LinearLayout{ec79636 VFE...C.. .......D 702,0-860,190 #7f08004e app:id/appFiveLinearLayout}
                              android.widget.FrameLayout{e839937 V.E...... ......ID 29,34-129,134 #7f080056 app:id/app_image_five}
                                android.widget.ImageView{e412ea4 I.ED..... ......ID 74,3-97,26 #7f080119 app:id/popup_image_five}
                              android.widget.TextView{4cf040d V.ED..... ........ 0,142-158,190 #7f08005e app:id/app_name_five}
                            android.widget.LinearLayout{e6edfc2 VFE...C.. .......D 860,0-1018,190 #7f080051 app:id/appSixLinearLayout}
                              android.widget.FrameLayout{f6e91d3 V.E...... ......ID 29,34-129,134 #7f080059 app:id/app_image_six}
                                android.widget.ImageView{eb49110 V.ED..... ......ID 74,3-97,26 #7f08011c app:id/popup_image_six}
                              android.widget.TextView{974d409 V.ED..... ........ 0,142-158,190 #7f080061 app:id/app_name_six}
                    com.bluestacks.launcher.widget.GroupPopupView{74f360e IFE...C.. ......ID 0,0-1600,864 #7f0800c2 app:id/groupPopup}
                      androidx.cardview.widget.CardView{6a0c61c I.E...... ......ID 0,0-647,406}
                        android.widget.LinearLayout{c06782f V.E...... ......ID 6,6-641,400}
                          android.widget.TextView{ab9ae3c VFED..C.. ........ 25,20-635,54 #7f0800c4 app:id/group_popup_label}
                          com.bluestacks.launcher.widget.CellContainer{28da7c5 I.ED..... ......ID 37,54-598,374 #7f0800c1 app:id/group}
                    android.view.View{6cca51a V.ED..... ......ID 44,166-82,554 #7f0800e3 app:id/leftDragHandle}
                    android.view.View{b8c684b V.ED..... ......ID 1518,166-1556,554 #7f080128 app:id/rightDragHandle}
                  com.bluestacks.launcher.widget.ItemOptionView$c{7917228 V.ED..... ........ 0,0-1600,864}"""

from indent2dict import indent2dict
conv = indent2dict(da2, removespaces=True)
print(conv)

{
    "DecorView@479a814[HomeActivity]": {
        "android.widget.LinearLayout{c7ad8bd V.E...... ......ID 0,0-1600,900}": {
            "android.widget.FrameLayout{a3aae03 V.E...... ......ID 0,0-1600,900 #1020002 android:id/content}": {
                "android.widget.FrameLayout{5533180 V.E...... ......ID 0,0-1600,900}": {
                    "androidx.drawerlayout.widget.DrawerLayout{68143b9 VFE...... ......ID 0,36-1600,900 #7f0800af app:id/drawer_layout}": {
                        "com.bluestacks.launcher.widget.ItemOptionView{1c263fe VFED..... .F....ID 0,0-1600,864 #7f0800dd app:id/item_option}": {
                            "androidx.constraintlayout.widget.ConstraintLayout{eb0275f V.E...... ......ID 0,0-1600,864}": {
                                "android.widget.LinearLayout{bd7a64f V.E...... .......D 196,631-1404,864 #7f0800a5 app:id/dock}": {
                                    "android.widget.FrameLayout{558d2e5 V.E...... .......D 0,27-1208,233 #7f0800bb app:id/frameLayout}": {
                                        "android.widget.FrameLayout{312586b V.E...... .......D 0,0-1208,206}": {
                                            "android.widget.LinearLayout{948b861 V.E...... .......D 62,-8-1146,182 #7f080048 app:id/allappsLinearLayout}": {
                                                "android.widget.LinearLayout{82a3f86 VFE...C.. .......D 66,0-225,190 #7f080050 app:id/appOneLinearLayout}": {
                                                    "android.widget.FrameLayout{fc1047 V.E...... ......ID 29,34-129,134 #7f080058 app:id/app_image_one}": {
                                                        "android.widget.ImageView{632c074 V.ED..... ......ID 74,3-97,26 #7f08011b app:id/popup_image_one}": 15
                                                    },
                                                    "android.widget.TextView{7f7799d V.ED..... ........ 0,142-159,190 #7f080060 app:id/app_name_one}": 16,
                                                },
                                                "android.widget.LinearLayout{7dace12 VFE...C.. .......D 225,0-384,190 #7f080053 app:id/appTwoLinearLayout}": {
                                                    "android.widget.FrameLayout{6df69e3 V.E...... ......ID 29,34-129,134 #7f08005b app:id/app_image_two}": {
                                                        "android.widget.ImageView{7f56fe0 I.ED..... ......ID 74,3-97,26 #7f08011e app:id/popup_image_two}": 19
                                                    },
                                                    "android.widget.TextView{2d71299 V.ED..... ........ 0,142-159,190 #7f080063 app:id/app_name_two}": 20,
                                                },
                                                "android.widget.LinearLayout{893b95e VFE...C.. .......D 384,0-543,190 #7f080052 app:id/appThreeLinearLayout}": {
                                                    "android.widget.FrameLayout{614c13f V.E...... ......ID 29,34-129,134 #7f08005a app:id/app_image_three}": {
                                                        "android.widget.ImageView{f71aa0c I.ED..... ......ID 74,3-97,26 #7f08011d app:id/popup_image_three}": 23
                                                    },
                                                    "android.widget.TextView{67d3f55 V.ED..... ........ 0,142-159,190 #7f080062 app:id/app_name_three}": 24,
                                                },
                                                "android.widget.LinearLayout{d5e0d6a VFE...C.. .......D 543,0-702,190 #7f08004f app:id/appFourLinearLayout}": {
                                                    "android.widget.FrameLayout{31e325b V.E...... ......ID 29,34-129,134 #7f080057 app:id/app_image_four}": {
                                                        "android.widget.ImageView{4955af8 V.ED..... ......ID 74,3-97,26 #7f08011a app:id/popup_image_four}": 27
                                                    },
                                                    "android.widget.TextView{91f7bd1 V.ED..... ........ 0,142-159,190 #7f08005f app:id/app_name_four}": 28,
                                                },
                                                "android.widget.LinearLayout{ec79636 VFE...C.. .......D 702,0-860,190 #7f08004e app:id/appFiveLinearLayout}": {
                                                    "android.widget.FrameLayout{e839937 V.E...... ......ID 29,34-129,134 #7f080056 app:id/app_image_five}": {
                                                        "android.widget.ImageView{e412ea4 I.ED..... ......ID 74,3-97,26 #7f080119 app:id/popup_image_five}": 31
                                                    },
                                                    "android.widget.TextView{4cf040d V.ED..... ........ 0,142-158,190 #7f08005e app:id/app_name_five}": 32,
                                                },
                                                "android.widget.LinearLayout{e6edfc2 VFE...C.. .......D 860,0-1018,190 #7f080051 app:id/appSixLinearLayout}": {
                                                    "android.widget.FrameLayout{f6e91d3 V.E...... ......ID 29,34-129,134 #7f080059 app:id/app_image_six}": {
                                                        "android.widget.ImageView{eb49110 V.ED..... ......ID 74,3-97,26 #7f08011c app:id/popup_image_six}": 35
                                                    },
                                                    "android.widget.TextView{974d409 V.ED..... ........ 0,142-158,190 #7f080061 app:id/app_name_six}": 36,
                                                },
                                            },
                                            "android.widget.ProgressBar{3826fc8 G.ED..... ......I. 589,88-619,118 #7f0800a6 app:id/dockLoadingBar}": 37,
                                        },
                                        "android.view.View{931c1ba V.ED..... ......ID 0,90-1208,206 #7f08017b app:id/viewBackground}": 38,
                                    },
                                    "android.widget.TextView{f9811dc V.ED..... ........ 0,9-1208,27 #7f080118 app:id/popular_gam}": 39,
                                },
                                "com.bluestacks.launcher.widget.GroupPopupView{74f360e IFE...C.. ......ID 0,0-1600,864 #7f0800c2 app:id/groupPopup}": {
                                    "androidx.cardview.widget.CardView{6a0c61c I.E...... ......ID 0,0-647,406}": {
                                        "android.widget.LinearLayout{c06782f V.E...... ......ID 6,6-641,400}": {
                                            "android.widget.TextView{ab9ae3c VFED..C.. ........ 25,20-635,54 #7f0800c4 app:id/group_popup_label}": 43,
                                            "com.bluestacks.launcher.widget.CellContainer{28da7c5 I.ED..... ......ID 37,54-598,374 #7f0800c1 app:id/group}": 44,
                                        }
                                    }
                                },
                                "com.bluestacks.launcher.widget.Desktop{75b098 VFED..... ......ID 44,166-1556,554 #7f08009c app:id/desktop}": {
                                    "com.bluestacks.launcher.widget.CellContainer{b7ab0f1 V.ED..... ......ID 0,0-1512,388}": {
                                        "d1.b{8cf4d6 VFED..CL. ........ 0,0-252,194}": 47,
                                        "d1.b{221a357 VFED..CL. ........ 252,0-504,194}": 48,
                                        "d1.b{4613e44 VFED..CL. ........ 504,0-756,194}": 49,
                                        "d1.b{af86b2d VFED..CL. ........ 756,0-1008,194}": 50,
                                        "d1.b{e3b8862 VFED..CL. ........ 1008,0-1260,194}": 51,
                                        "d1.b{25367c7 VFED..CL. ......I. 0,0-0,0}": 52,
                                    }
                                },
                                "android.widget.RelativeLayout{f79e5ac VFE...C.. ......ID 501,81-1100,130 #7f080133 app:id/searchRelativeLayout}": {
                                    "android.widget.ImageView{9e96275 V.ED..... ......ID 19,14-38,33 #7f080132 app:id/searchPlayIcon}": 54,
                                    "android.widget.ImageView{fdcc20a VFED..C.. ......ID 561,14-580,33 #7f080131 app:id/searchIcon}": 55,
                                    "android.widget.EditText{1d9da7b VFED..CL. ......ID 37,0-561,49 #7f080130 app:id/searchEditText}": 56,
                                },
                                "android.widget.LinearLayout{c55fab0 I.E...... ......ID 737,570-864,600 #7f0800d9 app:id/install_progress_layout}": {
                                    "android.widget.ProgressBar{71d8d29 V.ED..... ......ID 10,7-25,22 #7f0800ec app:id/loadingBar}": 58,
                                    "android.widget.TextView{f4dc8ae V.ED..... ......ID 35,4-117,25 #7f0800da app:id/installingGame}": 59,
                                },
                                "com.bluestacks.launcher.widget.PagerIndicator{b31df3 I.ED..... ......ID 0,554-1600,570 #7f08009d app:id/desktopIndicator}": 60,
                                "android.view.View{6cca51a V.ED..... ......ID 44,166-82,554 #7f0800e3 app:id/leftDragHandle}": 61,
                                "android.view.View{b8c684b V.ED..... ......ID 1518,166-1556,554 #7f080128 app:id/rightDragHandle}": 62,
                            },
                            "com.bluestacks.launcher.widget.ItemOptionView$c{7917228 V.ED..... ........ 0,0-1600,864}": 63,
                        }
                    }
                }
            },
            "android.view.ViewStub{d860eb2 G.E...... ......I. 0,0-0,0 #102018a android:id/action_mode_bar_stub}": 64,
        }
    }
}

data2 = """  
    MIME Typed Actions:
      com.android.camera.action.REVIEW:
        222a358 com.android.gallery3d/.app.GalleryActivity filter ca957c3
          Action: "android.intent.action.VIEW"
          Action: "com.android.camera.action.REVIEW"
          Category: "android.intent.category.DEFAULT"
          Category: "android.intent.category.BROWSABLE"
          Scheme: ""
          Scheme: "http"
          Scheme: "https"
          Scheme: "content"
          Scheme: "file"
          Type: "image"
          Type: "application/vnd.google.panorama360+jpg"
          mPriority=0, mOrder=0, mHasPartialTypes=true
        222a358 com.android.gallery3d/.app.GalleryActivity filter a9f840
          Action: "com.android.camera.action.REVIEW"
          Category: "android.intent.category.DEFAULT"
          Category: "android.intent.category.BROWSABLE"
          Scheme: "http"
          Scheme: "https"
          Scheme: "content"
          Scheme: "file"
          Type: "video/mpeg4"
          Type: "video/mp4"
          Type: "video/3gp"
          Type: "video/3gpp"
          Type: "video/3gpp2"
          Type: "application/sdp"
      androidx.activity.result.contract.action.PICK_IMAGES:
        2b8c15d com.google.android.gms/.photopicker.ui.PhotoPickerActivity filter b2e6b61
          Action: "androidx.activity.result.contract.action.PICK_IMAGES"
          Category: "android.intent.category.DEFAULT"
          Type: "image"
          Type: "video"
          mPriority=0, mOrder=0, mHasPartialTypes=true"""

conv2 = indent2dict(data2, removespaces=True)
print(conv2)

{
    "MIME Typed Actions:": {
        "com.android.camera.action.REVIEW:": {
            "222a358 com.android.gallery3d/.app.GalleryActivity filter ca957c3": {
                'Action: "android.intent.action.VIEW"': 5,
                'Action: "com.android.camera.action.REVIEW"': 6,
                'Category: "android.intent.category.DEFAULT"': 7,
                'Category: "android.intent.category.BROWSABLE"': 8,
                'Scheme: ""': 9,
                'Scheme: "http"': 10,
                'Scheme: "https"': 11,
                'Scheme: "content"': 12,
                'Scheme: "file"': 13,
                'Type: "image"': 14,
                'Type: "application/vnd.google.panorama360+jpg"': 15,
                "mPriority=0, mOrder=0, mHasPartialTypes=true": 16,
            },
            "222a358 com.android.gallery3d/.app.GalleryActivity filter a9f840": {
                'Action: "com.android.camera.action.REVIEW"': 18,
                'Category: "android.intent.category.DEFAULT"': 19,
                'Category: "android.intent.category.BROWSABLE"': 20,
                'Scheme: "http"': 21,
                'Scheme: "https"': 22,
                'Scheme: "content"': 23,
                'Scheme: "file"': 24,
                'Type: "video/mpeg4"': 25,
                'Type: "video/mp4"': 26,
                'Type: "video/3gp"': 27,
                'Type: "video/3gpp"': 28,
                'Type: "video/3gpp2"': 29,
                'Type: "application/sdp"': 30,
            },
        },
        "androidx.activity.result.contract.action.PICK_IMAGES:": {
            "2b8c15d com.google.android.gms/.photopicker.ui.PhotoPickerActivity filter b2e6b61": {
                'Action: "androidx.activity.result.contract.action.PICK_IMAGES"': 33,
                'Category: "android.intent.category.DEFAULT"': 34,
                'Type: "image"': 35,
                'Type: "video"': 36,
                "mPriority=0, mOrder=0, mHasPartialTypes=true": 37,
            }
        },
    }
}

Project details


Release history Release notifications | RSS feed

This version

0.10

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

indent2dict-0.10.tar.gz (11.7 kB view details)

Uploaded Source

Built Distribution

indent2dict-0.10-py3-none-any.whl (12.2 kB view details)

Uploaded Python 3

File details

Details for the file indent2dict-0.10.tar.gz.

File metadata

  • Download URL: indent2dict-0.10.tar.gz
  • Upload date:
  • Size: 11.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.5

File hashes

Hashes for indent2dict-0.10.tar.gz
Algorithm Hash digest
SHA256 823d8e18a6654b46c73ea21930c9d24d4a5df0cd35d82514a93379e57d7bc764
MD5 2adf21f263b91e55e1ef0ecc6ba57234
BLAKE2b-256 0f95fbc7141e0d284c83bd6890b0478a52afee953e27fe8b1d55b08b2c4b8d62

See more details on using hashes here.

File details

Details for the file indent2dict-0.10-py3-none-any.whl.

File metadata

  • Download URL: indent2dict-0.10-py3-none-any.whl
  • Upload date:
  • Size: 12.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.5

File hashes

Hashes for indent2dict-0.10-py3-none-any.whl
Algorithm Hash digest
SHA256 210a99bf80839b141bbdef873e69858d948014e1d3ab9eb5ca2639b0d2bba220
MD5 fb8d85d716310b7e1b452c7df2034260
BLAKE2b-256 bfd7c56b0d9a9acfcae572e1117a0df6a92987076fdeaf16d4d64f112bee5e09

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page