因此,我一直在努力制作一种监视器-监视器是什么,只要有新项目,对象,编号是新的,它就会打印出来,然后打印出来基本上没有什么害处。
我正在打印的json(我现在知道这不是正确的json格式,但它当前确实打印出了正确的内容)
"threads": {
"1": {
"name": "Hello",
"id": "4174"
},
"2": {
"name": "World",
"id": "6231"
},
"3": {
"name": "Overflow",
"id": "7231"
}
}
基本上,我现在已经完成了一个脚本:
def get_feed():
url = 'https://www.helloworld.com/loadfilter'
resp = s.get(url, timeout=6)
resp.raise_for_status()
return resp.json()['threads']
old_list = []
for index, thread in get_feed().items():
old_list.append(thread['id'])
while True:
try:
new_list = []
for index, thread in get_feed().items():
new_list.append(thread['id'])
for index, item in enumerate(new_list):
if item in old_list:
print(item['name'] # ERROR - string indices must be integers
else:
print('Sleeping 2 sec')
time.sleep(2)
except Exception as e:
print(e)
sys.exit()
因此,基本上,如果我在for index, thread in get_feed().items():
内打印thread['name']
的打印件,那不是问题,它将打印出来。
但是在if item in old_list:
的for循环中-问题是除了我添加到列表中的ID号外,它什么都不会打印出来,我想知道如何才能使它打印出来上面给出的json中的名字?
含义:每当我在if item old list
等项目['name']之后打印时,都应该给出名称?
答案 0 :(得分:1)
您的item
只是thread['id']
,这就是为什么您无法再访问name
的原因。
您可以尝试将整个线程对象而不只是id
例如:
for index, thread in get_feed().items():
new_list.append(thread)
,或者,如@henry答案中所建议的那样,不带循环:
new_list = list(get_feed().values())
然后您可以比较item['id']
是否在old_list
中,并且比print (item['name'])
有用,因为您将拥有整个thread
对象。
(编辑:请注意,在这里,我们仅检查id
,如果返回@henry的建议,则将检查整个thread
,包括它可能具有的每个属性)
答案 1 :(得分:1)
代码的问题在于,当您创建old_list
时,您只会附加每个id
的{{1}},而不是线程本身。如果您希望能够打印thread
中的name
,则需要将每个thread
对象放入thread
中。您还应该在创建old_list
时执行相同的操作,以使所有内容匹配。
这是您可以执行的操作:
创建new_list
(请注意,无需使用old_list
循环即可从字典中获取值)
for
创建old_list = list(get_feed().values())
:
new_list
检查/打印:
new_list = list(get_feed().values())