Python—如何在数字(json)使用json更改时打印名称
首先,我将展示json:Python—如何在数字(json)使用json更改时打印名称,python,json,for-loop,if-statement,Python,Json,For Loop,If Statement,首先,我将展示json: { "name": "LetsTryThis", "grades": [{ "name": "Stack", "pass_grade": 0 }, { "name": "Over", "pass_grade": 0 }, { "name": "flow",
{
"name": "LetsTryThis",
"grades": [{
"name": "Stack",
"pass_grade": 0
},
{
"name": "Over",
"pass_grade": 0
},
{
"name": "flow",
"pass_grade": 0
},
{
"name": "com",
"pass_grade": 0
}
]
}
正如你所看到的,每个人都有不同的名字,他们都有一个及格分数,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']]
问题是我被困在打印所有及格分数的地方,我的想法是,如果旧的和新的名单之间有任何变化,我可能会改变,但后来我意识到,在这种情况下,我将无法打印出姓名
因此,我的问题再次是,当及格分数从0变为1时,我如何能够打印出姓名?这可能有点冗长,因为我对python不太熟悉
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)
这可能有点冗长,因为我对python不太熟悉
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)
您可以尝试创建一个名称和等级的dict,然后进行检查 Ex:
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
输出:
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
您可以尝试创建一个名称和等级的dict,然后进行检查 Ex:
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
输出:
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
创建两个名称列表,其中第一个列表包含失败的旧列表中的名称,第二个列表包含通过的新列表中的名称。然后将列表交叉
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)
更新:
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
函数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)
创建两个名称列表,其中第一个列表包含失败的旧列表中的名称,第二个列表包含通过的新列表中的名称。然后将列表交叉
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)
更新:
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
函数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)
它不应该说超过1吗?
print(k,new\u list\u grades.get(k))
哦,是的!我意识到另一件事。所以,如果我在一段时间内运行这个选项,那么新列表可以多次更改。是否可以将新列表的值更新为旧列表,以便无论何时进行下一次检查,它都不应该再次打印通过等级1,而是在它变回0时打印?它不应该说超过1吗?print(k,new\u list\u grades.get(k))
噢,是的!我意识到另一件事。所以,如果我在一段时间内运行这个选项,那么新列表可以多次更改。是否有可能将新的\u列表的值更新为旧的\u列表,以便无论何时进行下一次检查,它都不应该再次打印通过的\u等级1,而是在它变回0时打印?哦,是的!我意识到另一件事。所以,如果我在一段时间内运行这个选项,那么新列表可以多次更改。是否可以将新的\u列表的值更新为旧的\u列表,以便无论何时进行下一次检查,它都不应该再次打印通过的\u等级1,而是在它变回0时打印?这是一个新的要求,与您原来的问题不同。我已经更新了答案。哦,对不起!再次感谢你是救世主!我不太明白你所说的“循环中的函数并传递任何新旧列表”是什么意思。当新的\u列表发生变化时,我们不需要更新旧的\u列表的值吗?当你第一次调用getGradeChangeNames()时,假设你传递了list1和list2,其中list1=旧列表,list2=新列表。当您第二次调用该函数时,您将使用list2=旧列表和list3=新列表进行调用。i、 e.您的新列表在后续通话中变为旧列表。但这取决于你如何管理新旧名单。哦,好吧!我的意思是它确实像你想的那样工作!我只是觉得它根本没有这样做,我很担心,我想如果我只想做0->1,而不关心1->0,但仍然要更新列表,我需要用什么方式从你的循环中继续?哦,是的!我意识到另一件事。所以,如果我在一段时间内运行这个选项,那么新列表可以多次更改。是否可以将新的\u列表的值更新为旧的\u列表,以便无论何时进行下一次检查,它都不应该再次打印通过的\u等级1,而是在它变回0时打印?这是一个新的要求,与您原来的问题不同。我已经更新了答案。哦,对不起!再次感谢你是救世主!我不太明白你所说的“循环中的函数并传递任何新旧列表”是什么意思。当新的\u列表发生变化时,我们不需要更新旧的\u列表的值吗?当你第一次调用getGradeChangeNames()时,假设你传递了list1和list2,其中list1=旧列表,list2=新列表。当您第二次调用该函数时,您将使用list2=旧列表和list3=新列表进行调用。i、 e.您的新列表在后续通话中变为旧列表。但这取决于你如何管理新旧名单。哦,好吧!我的意思是它确实像你想的那样工作!只是我认为它根本没有这样做,我担心它,我假设如果我只想做0->1,而不关心1->0,但仍然要更新列表,我需要用什么方式从循环中继续?