Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

How do I get specific keys and their values from nested dict in python?

I need help, please be kind I’m a beginner.
I have a nested dict like this:

dict_ = {
 "timestamp": "2022-11-18T10: 10: 49.301Z",
 "name" : "example",
 "person":{
    "birthyear": "2002"
    "birthname": "Examply"
 },
 "order":{
    "orderId": "1234"
    "ordername": "onetwothreefour"
 }
}

How do I get a new dict like:

new_dict = {"timestamp": "2022-11-18T10: 10: 49.301Z", "birthyear": "2002", "birthname": "Examply", "orderId": "1234"} 

I tried the normal things I could google.
But I only found solutions like getting the values without the keys back or it only works for flatten dicts.
Last thing I tried:

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

new_dict = {key: msg[key] for key in msg.keys() & {'timestamp', 'birthyear', 'birthname', 'orderId'}

This do not work for the nested dict.
May someone has an easy option for it.

>Solution :

A general approach:

dict_ = {
    "timestamp": "2022-11-18T10: 10: 49.301Z",
    "name": "example",
    "person": {
        "birthyear": "2002",
        "birthname": "Examply"
    },
    "order": {
        "orderId": "1234",
        "ordername": "onetwothreefour"
    }
}


def nested_getitem(d, keys):
    current = d
    for key in keys:
        current = current[key]
    return current


new_dict = {"timestamp": nested_getitem(dict_, ["timestamp"]),
            "birthyear": nested_getitem(dict_, ["person", "birthyear"]),
            "birthname": nested_getitem(dict_, ["person", "birthname"]),
            "orderId": nested_getitem(dict_, ["order", "orderId"]),
            }
print(new_dict)

Output

{'timestamp': '2022-11-18T10: 10: 49.301Z', 'birthyear': '2002', 'birthname': 'Examply', 'orderId': '1234'}
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading