Создать и обновить словарь с переменными-заполнителями в python - PullRequest
1 голос
/ 18 марта 2020

Я пытаюсь добиться чего-то подобного

classroom = {"john" : {"grade_math": placeholder_grade_math,
                       "grade_physics": placeholder_grade_physics}

, затем

grades = {"placeholder_grade_math": str(10),
          "placeholder_grade_physics": str(8))

, поэтому теперь я хотел бы сопоставить ключи grades с заполнителями classroom и обновить его. Есть ли какой-нибудь pythoni c способ сделать это?

Я сталкивался с этим вопросом , но я пытаюсь достичь того же самого без регулярного выражения.

Редактировать:

Я должен отметить, что dict classroom работает как шаблон. Он передается в класс как есть. Переменные-заполнители создаются при выполнении, и я хочу обновить их без необходимости использования ключей.

Конечно, ожидаемый результат -

classroom = {"john" : {"grade_math": "10",
                       "grade_physics": "8"}

, но каким-то образом "распакован" из * От 1023 * до classroom

Другое редактирование:

Скажите, что теперь оригинал classroom меняется на

classroom = {"john" : {"grade_math": placeholder_grade_math,
                       "grade_physics": placeholder_grade_physics,
                       "grade_geometry": placeholder_grade_geometry}

, но grades остается тем же. Причина, по которой я пытаюсь что-то вроде «распаковать», заключается в том, что я хочу иметь возможность изменять ключи только в 1 месте (classroom), а заполнитель заполнен, и мне не нужно также исправлять другую часть (grades ).

Ответы [ 3 ]

0 голосов
/ 18 марта 2020

Вам просто нужна функция:

def make_classroom(grades):
    return {
               "john": {
                           "grade_math": grades['math'],
                           "grade_physics": grades['physics']
                       }
           }

classroom = make_classroom({'math': "10", 'physics': "8"})
0 голосов
/ 18 марта 2020

Думаю, что-то подобное тоже сработает:

def getStudentGrades(**kwargs):
  classroom = {"john" :
   {
    "grade_math": kwargs["placeholder_grade_math"],
    "grade_physics": kwargs["placeholder_grade_physics"],
    "grade_geometry": kwargs["placeholder_grade_geometry"]
   }
  } 

  return classroom

if __name__ == "__main__":

  kwargs = {
   "placeholder_grade_math": str(10),
   "placeholder_grade_physics": str(8),
   "placeholder_grade_geometry": None
  }
   ### you can change geometry grades from None to 
   ### whichever score you would like, using `None` for reference.
  getJohnsGrade = getStudentGrades(**kwargs)
  print(getJohnsGrade)
0 голосов
/ 18 марта 2020

Это то, что вы ищете?

classroom = {"john" : {"grade_math": grades['placeholder_grade_math'],"grade_physics": grades['placeholder_grade_physics']}}
...