Home > Software engineering >  Cannot remove the first level element in JSON dictionary python
Cannot remove the first level element in JSON dictionary python

Time:01-05

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

CodePudding user response:

You probably want a list, not a dictionary:

amenities = [*amenities.values()]

Result:

[{'id': '9', 'name': 'Fitness facilities'}, {'id': '2820', 'name': 'Number of indoor pools - 10', 'value': 10}]

CodePudding user response:

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}}
  •  Tags:  
  • Related