我正試圖決議一個JSON輸出,如果一個Index的userId為5,我想忽略它。問題是,它仍然沒有忽略它。
下面是我讀取JSON的方法(有效):
import json
import urllib.request
url = "https://jsonplaceholder.typicode.com/posts"/span>
data = urllib.request.urlopen(url).read().decode()
site_info =json.load(data)
for info in site_info:
print(f"{}, {}, {}, {}"/span>. format(info["userId"], info["id"] 。
info["title"], info["body"] )
下面是我如何準備一個要檢查的userIds的串列(洗掉5不作業):
mylist= [{"userId"/span>:1}, {"userId": 2}, {"userId":3}, {"userId": 4}, {"userId":5},
{"userId":6}, {"userId":7}, {"userId": 8}, {"userId":9}, {"userId":10]
for i in range(len(mylist)-5, -5, -5)。)
print(i)
if mylist[i]["userId"] == 5:
mylist.pop(i)
print (mylist)
我還需要使用.pop作為作業的一部分。
uj5u.com熱心網友回復:
你的代碼完全按照你的要求來做:
你的代碼完全按照你的要求來做:
mylistn上的位置5和0mylist[i]["userId"] == 5,就會有所行動mylist[i]["userId"] == 5,所以什么都不做。除此之外。永遠不要在迭代時改變一個串列(除非你知道如何去做--你做得不對)。
你可以記住索引來彈出并單獨彈出:
你可以記住索引來彈出并單獨彈出。
idx_to_delete = [] 。
for idx,value in enumerate(mylist)。
if value["userId"] == 5:
idx_to_delete.append(idx)
# reverse - 因為如果你彈出2,然后彈出5,則彈出2。
# 將導致5現在是4等等,如果你彈出更高的那些。
# 首先,你不會有這個問題。
# reversed(idx_to_delete) == idx_to_delete[::-1]/span>
for id in reversed(idx_to_delete)。
mylist.pop(id)
為了提高問題的質量,你應該。
- 洗掉所有的JSON內容--你從未在你的實際問題中使用site_info,所以它不屬于一個最小的可復制的例子 。
- 去掉那些讓你困惑的東西。
range(len(mylist)-5, -5, -5)評估為range(10-5, -5, -5),如果迭代的結果是5,0- 所以用for i in (5,0):替換它。如果你檢查mylist[5]和mylist[0],你會發現兩者都沒有["userId"] == 5。
你的問題代碼將歸結為
你的問題代碼將歸結為
mylist= [{"userId"/span>:1},{"userId"/span>: 2},{"userId":3},{"userId": 4},{"userId":5}, {"userId":6},{"userId":7},{"userId": "userId":8},{"userId":10}" for i in(5,0)。 print(i) if mylist[i]["userId"] == 5: mylist.pop(i) print (mylist)為什么 "userId" == 5沒有被彈出?串列是不變的?
如果你這樣做的話,可能會更容易一些
id_to_ignore = {5,}
mylist = [{"userId":id}。for id in range(10) if id not in id_to_ignore ]
# or as loop
# mylist = []
# for id in range(1,11):
# if id in id_to_ignore:
# continue
# mylist.append( {"userId":id})
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/327366.html
標籤:
上一篇:在while回圈中,當我第一次回答"是",然后回答"否"時,它會再次進行回圈,而不會中斷回圈。
下一篇:如何對動態道具進行條件渲染
