【问题标题】:How to read each of the values in a nested dictionary using Python 3 and create a similar dictionary after modifiying a value如何使用 Python 3 读取嵌套字典中的每个值并在修改值后创建类似的字典
【发布时间】:2021-05-23 12:18:55
【问题描述】:

我正在尝试做这样的事情。我想读取以下字典中的每个键和值并执行一些操作,例如,为Grade2 找到每个低于90 的值并将其增加到90。最后,用这些修改创建另一个字典。

输入:

markssheet = {
  "Schools": {
    "ABCElementarySchool": {
      "Grade1": {
        "Ethan": 92,
        "Joyee": 89
      },
      "Grade2": {
        "Rifat": 92,
        "Jason": 88,
      },
      "Grade3": {
        "Sophia": 95,
        "Hassan": 93,
      }
    },
    "EdisonElementarySchool": {
      "Grade1": {
        "Ethan": 91,
        "Joyee": 90
      },
      "Grade2": {
        "Ethan": 79,
        "John": 92
      }
    }
  }
}

输出:

updated_markssheet = {
  "Schools": {
    "ABCElementarySchool": {
      "Grade1": {
        "Ethan": 92,
        "Joyee": 90
      },
      "Grade2": {
        "Rifat": 92,
        "Jason": 90,
      },
      "Grade3": {
        "Sophia": 95,
        "Hassan": 93,
      }
    },
    "EdisonElementarySchool": {
      "Grade1": {
        "Ethan": 91,
        "Joyee": 90
      },
      "Grade2": {
        "Ethan": 90,
        "John": 92
      }
    }
  }
}

我可以使用 4 个不同的 for 循环和 key, value 和 4 个 if 条件来完成此操作,但这不是我可以在任何字典中使用的东西。一些值可以在嵌套的更深层次上。在这种情况下,我的代码将无法工作。

所以,我想知道是否可以使用带有递归函数之类的较短循环,以便它适用于任何字典,但我不知道如何。如果任何其他方法适用于任何字典,那也没关系。

【问题讨论】:

    标签: python-3.x dictionary recursion


    【解决方案1】:

    你可以用递归函数来做,比如这个:

    def transformMap(sheet):
        for k in sheet:
            if isinstance(sheet[k], int) and sheet[k] < 90:
                sheet[k] = 90
            if isinstance(sheet[k], dict):
                transformMap(sheet[k])
    

    请注意,它会更改字段值而不创建另一个字典。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-30
      • 2018-09-13
      • 2012-09-16
      • 1970-01-01
      • 2021-07-29
      • 2018-07-10
      • 2021-03-23
      • 2021-04-04
      相关资源
      最近更新 更多