Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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:

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.

like image 456
JazCodes Avatar asked May 14 '26 21:05

JazCodes


1 Answers

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'}
like image 193
Dani Mesejo Avatar answered May 16 '26 12:05

Dani Mesejo



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!