代码之家  ›  专栏  ›  技术社区  ›  Kaira Asia

Python在中编辑/重命名键名。json

  •  8
  • Kaira Asia  · 技术社区  · 6 年前

    有没有办法更改密钥名称? 我需要更改名称 "Class123" 就像示例中一样。我可以更改值,但我不知道如何更改密钥名称。

    实例json:

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

    这样开始:

    with open('my.json') as json1:
        data = json.load(json1)
        for item in data:
    
    4 回复  |  直到 5 年前
        1
  •  24
  •   DeepSpace    6 年前

    无法“更改”密钥名称。 您所能做的最好的操作是使用 pop :

    d = {'old_name': 1}
    d['new_name'] = d.pop('old_name')
    print(d)
    # {'new_name': 1}
    
        2
  •  4
  •   Mike G    6 年前

    我想在这里添加我的方法,因为它将单数命名扩展为使用键的dict。

    假设您有一个示例JSON列表 ga_list 您想用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}]
    

    所有旧名称都会根据密钥重命名。

    希望这对别人有帮助。

        3
  •  3
  •   Freddy    6 年前

    类似于

    your_dict[new_key] = your_dict.pop(old_key)
    

    从dict中删除旧密钥并创建新密钥。

        4
  •  3
  •   Saurabh Bade    4 年前

    一种方法是使用replace()函数,但请确保必须首先将JSON Dict转换为String,因为无法更改字典的键。

    
    json_data = json_data.replace('key_old1','Key_new1').replace('key_old2','key_new2')
    
    

    希望这有帮助。 干杯