Existe-t-il un moyen de changer le nom de la clé? J'ai besoin de changer le nom "Class123" comme dans l'exemple. Je peux changer la valeur mais je ne sais pas comment changer le nom de la clé.

Exemple .json:

{
    "Class123": "classvalue", 
    "name1": {
        "name2": {
            "name3": {
                "Y": 158.8, 
                "X": 201.46
            }, 
            "name4": {
                "Y": 159.68, 
                "X": 200.32
            }
        }
    }
}

Commencer comme ça:

    with open('my.json') as json1:
data = json.load(json1)
for item in data:
2
Kaira Asia 11 avril 2018 à 17:36

3 réponses

Meilleure réponse

Il n'y a aucun moyen de "changer" un nom de clé. Le mieux que vous puissiez faire est de copier la valeur sur une autre clé en utilisant pop:

d = {'old_name': 1}
d['new_name'] = d.pop('old_name')
print(d)
# {'new_name': 1}
6
DeepSpace 11 avril 2018 à 14:39

Je voudrais ajouter ma méthode ici car elle étend la dénomination singulière à l'utilisation d'un dict de clés.

Disons que vous avez un exemple de liste JSON ga_list et que vous souhaitez modifier tous les noms avec une clé dict names_key:

names_key = { 'ga:date'            : 'date' ,
              'ga:bounceRate'      : 'bounce' ,
              'ga:newUsers'        : 'new_users', 
              'ga:pageviews'       : 'page_views',
              'ga:sessions'        : 'sessions',
              'ga:uniquePageviews' : 'unique_page_views',
              'ga:users'           : 'users'
              }

ga_list = [{
      'ga:bounceRate': 34.478408,
      'ga:date': '20151203',
      'ga:newUsers': 1679,
      'ga:pageviews': 550,
      'ga:sessions': 307,
      'ga:uniquePageviews': 467,
      'ga:users': 256},
    {'ga:bounceRate': 21.28534,
      'ga:date': '20151204',
      'ga:newUsers': 164,
      'ga:pageviews': 594,
      'ga:sessions': 305,
      'ga:uniquePageviews': 476,
      'ga:users': 252},
    {'ga:bounceRate': 13.8372346,
      'ga:date': '20151205',
      'ga:newUsers': 152,
      'ga:pageviews': 826,
      'ga:sessions': 330,
      'ga:uniquePageviews': 241,
      'ga:users': 200}]

for row in ga_list:
  for k, v in names_key.items():
    for old_name in row:
      if k == old_name:
        row[v] = row.pop(old_name)

print(ga_list)

>>>
[{'bounce': 34.47842608,
  'date': '20151203',
  'new_users': 1679,
  'page_views': 550,
  'sessions': 307,
  'unique_page_views': 467,
  'users': 256},
 {'bounce': 21.28534,
  'date': '20151204',
  'new_users': 164,
  'page_views': 594,
  ....
  'unique_page_views': 241,
  'users': 200}]

Et voilà, tous les anciens noms sont renommés en fonction de la clé.

J'espère que cela aide quelqu'un.

1
Mike G 6 déc. 2018 à 07:52

Quelque chose comme

your_dict[new_key] = your_dict.pop(old_key)

Suppression de l'ancienne clé de votre dict et création d'une nouvelle.

2
Freddy 11 avril 2018 à 14:39