【发布时间】:2018-12-10 21:40:01
【问题描述】:
所以我在这里一直在尝试创建一个脚本,在其中比较两个列表,我称之为 old_list 和 new_list。 Old_list 是我在 While True 之前使用的变量。在 While true 中,我使用 new_list ([line.rstrip('\n') for line in open('newlist.txt')]。然后我的想法是比较 old_list 和 new_list。
我有一个 Json(新列表),看起来像:
{
"name": "LetsTryThis",
"grades": [{
"name": "Stack",
"pass_grade": 0
},
{
"name": "Over",
"pass_grade": 0
},
{
"name": "flow",
"pass_grade": 0
},
{
"name": "com",
"pass_grade": 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 = [line.rstrip('\n') for line in open('newlist.txt')]#For be able to test it you can just copy the same value as old_list and just change the values of pass_grades to 1
while True:
test = getGradeChangeNames(old_list, new_list)
if test != []:
print("New item found - " + ", ".join(test))
old_list = new_list
print(old_list)
else:
print("sleep")
time.sleep(2)
函数getGradeChangeNames() 将返回所有等级已更改的名称,0->1 或 1->0。
但是我希望我的脚本做什么:
我想创建一个脚本,它会在值更改 0 -> 1 和 1 -> 0 时检查它。但我希望它只在 0 -> 1 发生时打印出来(打印出“名称”)而不是当 1 -> 0 发生时。但是,正如您所看到的,我有一个 sleep(2) 并且可能发生的情况是我可以将 json 值 newlist.txt 等更改为:
{
"name": "LetsTryThis",
"grades": [{
"name": "Stack",
"pass_grade": 0
},
{
"name": "Over",
"pass_grade": 0
},
{
"name": "flow",
"pass_grade": 1
},
{
"name": "com",
"pass_grade": 1
}
]
}
在这种情况下,它应该 ping 'Over' 和 'com' 并且在下一个循环搜索中它不应该再 ping。如果 pass_grade 从 1 变为 0,它应该更新值而不打印出含义,每当它再次达到 0 到 1 时,它应该再次打印出来。
我的问题是:我怎样才能打印出从 0->1 变化的所有值一次,并在值从 1 变化时更新值-> 0?
我希望,我真的希望我描述它是正确的,如果有任何问题,请随时发表评论,我会尽力回答!
【问题讨论】:
-
您可以编辑您的帖子以在标题和/或正文中包含您的实际问题吗?
-
@RandomDavis 将在帖子底部立即执行此操作!感谢您对此发表评论!
标签: python list for-loop compare