This is my JSON array:
amenities = {
"9": {
"id": "9",
"name": "Fitness facilities"
},
"2820": {
"id": "2820",
"name": "Number of indoor pools - 10",
"value": 10
}
},
Now I want to make it like this by removing the first level element because it is similar to ‘id’:
amenities = {
({"id": "9","name": "Fitness facilities"}),
({"id": "2820","name": "Number of indoor pools - 10","value": 10})
}
This is the dataframe I have, ‘amenities’ column’s type is string:
enter image description here
This is the code I wrote to do it:
amenities_df['amenities_list'] = amenities_df['amenities'].map(lambda amenities_dict: amenities_dict.values() if isinstance(amenities, dict) else amenities_dict)
But I cannot remove the first level element.
What did I go wrong? Please help.
Thank you very much
>Solution :
It seems to me that the best option here is not to "remove" the first level so much as rename it.
What you are working with is a python dictionary and it requires key – value pairs. The dictionary that you said you desire is not a correct dictionary. It does not have keys and values.
amenities = {
({"id": "9","name": "Fitness facilities"}),
({"id": "2820","name": "Number of indoor pools - 10","value": 10})
}
I see a couple of options here. One, you could have a list of dictionaries:
dict_list = [
{"id": "9","name": "Fitness facilities"},
{"id": "2820","name": "Number of indoor pools - 10","value": 10}
]
which will "remove" the top level but is no longer a dictionary data structure. It’s a list containing dictionaries.
Second, you could rename the top level so that it is not the same as the id element.
updated_dict = {}
for i, k in enumerate(amenities.keys()):
updated_dict[i] = amenities[k]
which results in
{0: {'id': '9', 'name': 'Fitness facilities'},
1: {'id': '2820', 'name': 'Number of indoor pools - 10', 'value': 10}}