umdev
umdev

Reputation: 359

How to add new key in the existing dictionary and derive a nested dictionary from it in python?

Iam trying to add new key inside the existing dictionary to create a new nested dictionary

Below is the existing dictionary

I need to make a nested dictionary from the below dictionary
{'userId': 'thanks',
 'jobTitleName': 'Program Directory', 
 'firstName': 'Tom', 'lastName': 'Hanks', 
 'preferredFullName': 'Tom Hanks',
 'employeeCode': 'E3',
 'region': 'CA', 
 'phoneNumber': '+00408-2222222', 
 'emailAddress': '[email protected]', 
 'Full Name': 'TomHanks'}

This is what i tried:

key1=['userId','jobTitleName','firstName','lastName','employeeCode']
key2=['Full Name','phoneNumber','region','emailAddress']
jsonValue={
{'userId': 'thanks',
 'jobTitleName': 'Program Directory', 
 'firstName': 'Tom', 'lastName': 'Hanks', 
 'preferredFullName': 'Tom Hanks',
 'employeeCode': 'E3',
 'region': 'CA', 
 'phoneNumber': '+00408-2222222', 
 'emailAddress': '[email protected]', 
 'Full Name': 'TomHanks'}
}
empDetails={}
for k in key1:
    empDetails[k]=jsonValue[k]
print("Key1", empDetails)
for k2 in key2:
    empDetails['otherDetails'][k2]=jsonValue[k2]

But its not working

Expected:

Now i need to add new key as 'otherDetails' to derive a nested dictionary as follows

{'userId': 'thanks',
 'jobTitleName': 'Program Directory', 
 'firstName': 'Tom', 'lastName': 'Hanks', 
 'preferredFullName': 'Tom Hanks',
 'employeeCode': 'E3',
 otherDetails{
    'region': 'CA', 
    'phoneNumber': '+00408-2222222', 
    'emailAddress': '[email protected]', 
    'Full Name': 'TomHanks'
 }
 }

Appreciate if anyone can give right solution? Thanks

Upvotes: 0

Views: 56

Answers (2)

RoadRunner
RoadRunner

Reputation: 26315

Filter out which keys you want to keep, then filter out the keys you want to move to the inner dict, then insert the inner dict.

from pprint import pprint

d = {
    "userId": "thanks",
    "jobTitleName": "Program Directory",
    "firstName": "Tom",
    "lastName": "Hanks",
    "preferredFullName": "Tom Hanks",
    "employeeCode": "E3",
    "region": "CA",
    "phoneNumber": "+00408-2222222",
    "emailAddress": "[email protected]",
    "Full Name": "TomHanks",
}

# Outer keys you want to keep
keys_to_keep = {'userId','jobTitleName','firstName','lastName','preferredFullName', 'employeeCode'}

# Keys you want to move into inner dict
keys_to_move = {'Full Name','phoneNumber','region','emailAddress'}

# Create dict to insert into
new_dict = {k: d[k] for k in keys_to_keep}

# Create dict to insert into above dict
insert_dict = {k: d[k] for k in keys_to_move}

# Insert inner dict
new_dict['otherDetails'] = insert_dict

pprint(new_dict)

Output:

{'employeeCode': 'E3',
 'firstName': 'Tom',
 'jobTitleName': 'Program Directory',
 'lastName': 'Hanks',
 'userId': 'thanks',
 'preferredFullName': 'Tom Hanks',
 'otherDetails': {'Full Name': 'TomHanks',
                  'emailAddress': '[email protected]',
                  'phoneNumber': '+00408-2222222',
                  'region': 'CA'},
}

Upvotes: 0

seven_seas
seven_seas

Reputation: 723

There are a couple of Problems in you code. First in your jsonValue you put a dict inside of a dict, but don't specify a key here. From context I assume you actually want to use an Array here (since you most likely have an array of employee data, If I'm wrong here just comment)
Then you try to assign to empDetails['otherDetails'][k2] however, you never initialize the dict in empDetails['otherDetails'] . because of this you actually try to assign to None (Because empDetails['otherDetails'][k2] will evaluate to None[k2]

key1 = ['userId', 'jobTitleName', 'firstName', 'lastName', 'employeeCode']
key2 = ['Full Name', 'phoneNumber', 'region', 'emailAddress']
jsonValue = [{
    'userId': 'thanks',
    'jobTitleName': 'Program Directory',
    'firstName': 'Tom', 'lastName': 'Hanks',
    'preferredFullName': 'Tom Hanks',
    'employeeCode': 'E3',
    'region': 'CA',
    'phoneNumber': '+00408-2222222',
    'emailAddress': '[email protected]',
    'Full Name': 'TomHanks'
}
]
for employee in jsonValue:
    empDetails = {'otherDetails': {}}
    for k in key1:
        empDetails[k] = employee[k]
    print("Key1", empDetails)
    for k2 in key2:
        empDetails['otherDetails'][k2] = employee[k2]
    print("Key1", empDetails)

Upvotes: 1

Related Questions