Home > Enterprise >  python nested dict reorganization to list
python nested dict reorganization to list

Time:11-04

Do you know if there is a quick method to do the following dictionary transformation? (without looping through dict's keys and construct it from scratch)

From this nested python dictionary:

{
    "demographicAll": {
        "allAges": {
            "rating": "8.8",
            "votes": "2327099"
        },
        "agesUnder18": {
            "rating": "9.0",
            "votes": "1050"
        },
        "ages18To29": {
            "rating": "9.0",
            "votes": "363089"
        },
        "ages30To44": {
            "rating": "8.8",
            "votes": "914737"
        },
        "agesOver45": {
            "rating": "8.2",
            "votes": "182612"
        }
    }
}

to this one:

{

    "demographicAll": [
        {
            "ageRange": "allAges",
            "rating": "8.8",
            "votes": "2327099"
        },{
            "ageRange": "agesUnder18",
            "rating": "9.0",
            "votes": "1050"
        },{
            "ageRange": "ages18To29",
            "rating": "9.0",
            "votes": "363089"
        },{
            "ageRange": "ages30To44",
            "rating": "8.8",
            "votes": "914737"
        },{
            "ageRange": "agesOver45",
            "rating": "8.2",
            "votes": "182612"
        }
    ]
}

CodePudding user response:

The best I was able to do (it still loops through the dictionary inside the list comprehension) is:

mydict =    {
    "demographicAll": {
        "allAges": {
            "rating": "8.8",
            "votes": "2327099"
        },
        "agesUnder18": {
            "rating": "9.0",
            "votes": "1050"
        },
        "ages18To29": {
            "rating": "9.0",
            "votes": "363089"
        },
        "ages30To44": {
            "rating": "8.8",
            "votes": "914737"
        },
        "agesOver45": {
            "rating": "8.2",
            "votes": "182612"
        }
    }
}

d = mydict["demographicAll"]
mydict["demographicAll"] = [d[key] for key in d if not d[key].update({'ageRange':key})]
  • Related