Python Forum
Convert List of Dictionary to dictionary of dictionary list in python
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Convert List of Dictionary to dictionary of dictionary list in python
#1
Hi ALl ,

Need your help in python code for the following output required. thanks in advance.

Source file:


[ { "Env" :"dit",
"id": 1,
"appId": "AP11232",
"health": true
},
{ "Env" :"dit",
"id": 2,
"appId": "AP11232",
"health": false
}
{
"Env" :"int",
"id": 1,
"appId": "AP11232",
"health": true
},
{
"Env" :"int",
"id": 2,
"appId": "AP11232",
"health": true
},
{
"Env" :"int",
"id": 3,
"appId": "AP11232",
"health": true
},
{
"Env" :"int",
"id": 4,
"appId": "AP11232",
"health": true
}
]

Output Required:


{
"dit": [
{
"id": 1,
"appId": "AP11232",
"health": true
},
{
"id": 2,
"appId": "AP11232",
"health": false
}
],
"int":[
{
"id": 1,
"appId": "AP11232",
"health": true
},
{
"id": 2,
"appId": "AP11232",
"health": true
},
{
"id": 3,
"appId": "AP11232",
"health": true
},
{
"id": 4,
"appId": "AP11232",
"health": true
}]
}
Reply
#2
Ok I hope this does the trick -
outputDict = {}

randomDict = [{ "Env" :"dit",
"id": 1,
"appId": "AP11232",
"health": True
},
{ "Env" :"dit",
"id": 2,
"appId": "AP11232",
"health": False
},
{
"Env" :"int",
"id": 1,
"appId": "AP11232",
"health": True
},
{
"Env" :"int",
"id": 2,
"appId": "AP11232",
"health": True
},
{
"Env" :"int",
"id": 3,
"appId": "AP11232",
"health": True
},
{
"Env" :"int",
"id": 4,
"appId": "AP11232",
"health": True
}
]

for Dict in randomDict:
    key = Dict['Env']
    outputDict.update({key : [{'id' : Dict['id'], 'health' : Dict['health'], 'appId' : Dict['appId']}]})
    
print(outputDict)

What do you need this for
Age Doesn't Matter, Your Passion Does
- Shreya Jain
Reply
#3
I observe that there is no comma in source file between second and third dictionary; true and false are not booleans but just names which you have to define. I inserted missing comma and changed 'health' values to booleans.

If we analyse source and expected output:

source = [ {"Env" :"dit", "id": 1, "appId": "AP11232", "health": True},
           {"Env" :"dit", "id": 2, "appId": "AP11232", "health": False},  
           {"Env" :"int", "id": 1, "appId": "AP11232", "health": True},
           {"Env" :"int", "id": 2, "appId": "AP11232", "health": True},
           {"Env" :"int", "id": 3, "appId": "AP11232", "health": True},
           {"Env" :"int", "id": 4, "appId": "AP11232", "health": True}
         ]

result =         {"dit": [{"id": 1, "appId": "AP11232", "health": True},
                          {"id": 2, "appId": "AP11232", "health": False}],
                  "int": [{"id": 1, "appId": "AP11232", "health": True},
                          {"id": 2, "appId": "AP11232", "health": True}, 
                          {"id": 3, "appId": "AP11232", "health": True},
                          {"id": 4, "appId": "AP11232", "health": True}]
We can define objective - "from every dictionary in source pop out key 'Env' and make its value key in a new dictionary with value type list and append remaining dictionary to this". Doing it this way we don't need to know what are the remaining keys in source dictionary, we just grab what we need and keep everything else as it is.

To avoid key errors in situations where keys don't exist one could use defaultdict from built-in collections module or dictionary method setdefault (I used setdefault as it doesn't require import):

d = {}
for row in source:
    d.setdefault(row.pop('Env'), []).append(row)
Output:
{'dit': [{'id': 1, 'appId': 'AP11232', 'health': True}, {'id': 2, 'appId': 'AP11232', 'health': False}], 'int': [{'id': 1, 'appId': 'AP11232', 'health': True}, {'id': 2, 'appId': 'AP11232', 'health': True}, {'id': 3, 'appId': 'AP11232', 'health': True}, {'id': 4, 'appId': 'AP11232', 'health': True}]}
I'm not 'in'-sane. Indeed, I am so far 'out' of sane that you appear a tiny blip on the distant coast of sanity. Bucky Katt, Get Fuzzy

Da Bishop: There's a dead bishop on the landing. I don't know who keeps bringing them in here. ....but society is to blame.
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Dictionary generator Irv1n 4 295 Jul-21-2021, 10:11 PM
Last Post: Yoriz
  Pandas dictionary dataframe help michaelserra 4 325 Jun-19-2021, 10:26 AM
Last Post: michaelserra
  random from python dictionary rwahdan 2 285 Jun-18-2021, 09:05 AM
Last Post: rwahdan
  Convert each element of a list to a string for processing tester_V 6 561 Jun-16-2021, 02:11 AM
Last Post: tester_V
  Compile list of dictianories out of another list of dictianories by certain keys CatorCanulis 10 654 Jun-10-2021, 08:35 PM
Last Post: perfringo
  convert numbers into list lokesh 1 409 Jun-03-2021, 06:37 AM
Last Post: menator01
  Reading data to python: turn into list or dataframe hhchenfx 2 335 Jun-01-2021, 10:28 AM
Last Post: Larz60+
  Question about change hex string to integer sting in the list (python 2.7) lzfneu 1 407 May-24-2021, 08:48 AM
Last Post: bowlofred
  dictionary coral_raha 5 509 May-22-2021, 12:59 PM
Last Post: Yoriz
  Nested dictionary acting strange Pedroski55 2 448 May-13-2021, 10:37 PM
Last Post: Pedroski55

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020