Python - Как напечатать имя, когда число (in-json) изменилось с помощью json - PullRequest
0 голосов
/ 10 декабря 2018

Я начну с показа json:

{
    "name": "LetsTryThis",
    "grades": [{
            "name": "Stack",
            "pass_grade": 0
        },
        {
            "name": "Over",
            "pass_grade": 0
        },
        {
            "name": "flow",
            "pass_grade": 0
        },
        {
            "name": "com",
            "pass_grade": 0
        }
    ]
}

Как видите, у каждого свое имя, и у каждого из них pass_grade, где 0 не пройден, а 1 передан.

Что я хочу сделать - это то, что я хочу сделать сравнение, где у меня есть новый json, который выглядит так:

{
  'name': 'LetsTryThis',
  'grades': [
    {
      'name': 'Stack',
      'pass_grade': 0
    },
    {
      'name': 'Over',
      'pass_grade': 1
    },
    {
      'name': 'flow',
      'pass_grade': 0
    },
    {
      'name': 'com',
      'pass_grade': 0
    }
  ]
}

и яхочу, чтобы он печатал имя всякий раз, когда кто-то прошел.

Код, который я создал:

    old_list = {'name': 'LetsTryThis',  'grades': [{'name': 'Stack', 'pass_grade': 0}, {'name': 'Over', 'pass_grade': 0},{'name': 'Flow', 'pass_grade': 0},{'name': 'Com', 'pass_grade': 0}]}
    new_list = {'name': 'LetsTryThis', 'grades': [{'name': 'Stack', 'pass_grade': 0}, {'name': 'Over', 'pass_grade': 1}, {'name': 'Flow', 'pass_grade': 0}, {'name': 'Com', 'pass_grade': 0}]}

   old_list_grades = [i['pass_grade'] for i in old_list['grades']]

Проблема в том, что я застрял там, где просто распечатал все pass_grades и моиИдея была, возможно, изменить, если есть какие-либо изменения между old_list и new_list, но потом я понял, что не смогу распечатать имена в этом случае.

Так что мой вопрос еще раз заключается в том, как я могу бытьвозможность печатать имя всякий раз, когда pass_grade был изменен с 0 на 1?

Ответы [ 3 ]

0 голосов
/ 10 декабря 2018

Вы можете попытаться создать диктат имени и класса, а затем выполнить проверку.

Пример:

old_list = {'name': 'LetsTryThis',  'grades': [{'name': 'Stack', 'pass_grade': 0}, {'name': 'Over', 'pass_grade': 0},{'name': 'Flow', 'pass_grade': 0},{'name': 'Com', 'pass_grade': 0}]}
new_list = {'name': 'LetsTryThis', 'grades': [{'name': 'Stack', 'pass_grade': 0}, {'name': 'Over', 'pass_grade': 1}, {'name': 'Flow', 'pass_grade': 0}, {'name': 'Com', 'pass_grade': 0}]}

old_list_grades = {i["name"]: i["pass_grade"] for i in old_list["grades"]}
new_list_grades = {i["name"]: i["pass_grade"] for i in new_list["grades"]}

for k, v in old_list_grades.items():
    if v == 0:
        if new_list_grades.get(k) == 1:
            print(k, v)

Выход:

Over 0
0 голосов
/ 10 декабря 2018

Создайте два списка имен, где первый список содержит имена из старого списка, который потерпел неудачу, а второй содержит имена из нового списка тех, кто прошел.Затем возьмите пересечение списков.

old_list = {'name': 'LetsTryThis',  'grades': [{'name': 'Stack', 'pass_grade': 0}, {'name': 'Over', 'pass_grade': 0},{'name': 'Flow', 'pass_grade': 0},{'name': 'Com', 'pass_grade': 0}]}
new_list = {'name': 'LetsTryThis', 'grades': [{'name': 'Stack', 'pass_grade': 0}, {'name': 'Over', 'pass_grade': 1}, {'name': 'Flow', 'pass_grade': 0}, {'name': 'Com', 'pass_grade': 0}]}

old_failed = [ i['name'] for i in old_list['grades'] if i['pass_grade'] == 0] 
new_passed = [ i['name'] for i in new_list['grades'] if i['pass_grade'] == 1] 

change_to_pass = list(set(old_failed) & set(new_passed)) 
print(change_to_pass)

Обновление:

Функция getGradeChangeNames() вернет все имена, для которых оценкаизменилось либо 0-> 1, либо из 1-> 0.Вы можете вызывать эту функцию в цикле и передавать любые старые и новые списки.

def getGradeChangeNames(old_list,new_list):
    old_grades = {i["name"]: i["pass_grade"] for i in old_list["grades"]}
    new_grades = {i["name"]: i["pass_grade"] for i in new_list["grades"]}
    changed_grades = [old_name for old_name,old_grade in old_grades.items() if old_grade != new_grades[old_name] ]
    return changed_grades


old_list = {'name': 'LetsTryThis',  'grades': [{'name': 'Stack', 'pass_grade': 1}, {'name': 'Over', 'pass_grade': 0},{'name': 'Flow', 'pass_grade': 0},{'name': 'Com', 'pass_grade': 0}]}
new_list = {'name': 'LetsTryThis', 'grades': [{'name': 'Stack', 'pass_grade': 0}, {'name': 'Over', 'pass_grade': 1}, {'name': 'Flow', 'pass_grade': 0}, {'name': 'Com', 'pass_grade': 0}]}

getGradeChangeNames(old_list,new_list)
0 голосов
/ 10 декабря 2018

Это может быть немного многословно, так как я не очень знаком с питоном

old_list = {'name': 'LetsTryThis',  'grades': [{'name': 'Stack', 'pass_grade': 0}, {'name': 'Over', 'pass_grade': 0},{'name': 'Flow', 'pass_grade': 0},{'name': 'Com', 'pass_grade': 0}]}
new_list = {'name': 'LetsTryThis', 'grades': [{'name': 'Stack', 'pass_grade': 0}, {'name': 'Over', 'pass_grade': 1}, {'name': 'Flow', 'pass_grade': 0}, {'name': 'Com', 'pass_grade': 0}]}
fails = [name['name'] for name in old_list['grades'] if name['pass_grade'] == 0]
now_passes = [name['name'] for name in new_list['grades'] if name['pass_grade'] == 1 and name['name'] in fails ]
print(now_passes)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...