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.
CodePudding user response:
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'}
CodePudding user response:
dict_ = {
"timestamp": "2022-11-18T10: 10: 49.301Z",
"name" : "example",
"person":{
"birthyear": "2002",
"birthname": "Examply"
},
"order":{
"orderId": "1234",
"ordername": "onetwothreefour"
}
}
def get_new_dict(valid_dict):
new_dict = {'timestamp': valid_dict['timestamp'],
'birthyear': valid_dict['person']['birthyear'],
'birthname': valid_dict['person']['birthname'],
'orderId': valid_dict['order']['orderId']
}
return new_dict
new_dict = get_new_dict(dict_)
print(new_dict)
output:
{'timestamp': '2022-11-18T10: 10: 49.301Z', 'birthyear': '2002', 'birthname': 'Examply', 'orderId': '1234'}