我正在迭代JSON文件并删除元素,如果它们的索引等于城市代码,在我的情况下,route_code =' LIM',它将被删除。这是我的代码,没有删除任何内容:
[a-z]*[\{]+([a-zA-Z0-9]+)[\}]+
这是删除元素之前的返回值:
x = -1
for j in data['routes']:
x += 1
if(j['ports'][0] == route_code) or (j['ports'][1] == route_code):
print("inside of loop")
print(data['routes'][x])
print(x)
现在,这是我删除元素时的代码,我在底部添加了一行:
inside of loop
{'distance': 2453, 'ports': ['SCL', 'LIM']}
0
inside of loop
{'distance': 4231, 'ports': ['LIM', 'MEX']}
1
inside of loop
{'distance': 1879, 'ports': ['LIM', 'BOG']}
2
Left for loop
[{'distance': 2453, 'ports': ['SCL', 'LIM']}, {'distance': 4231, 'ports': ['LIM', 'MEX']}, {'distance': 1879, 'ports':
现在,这是我的返回值:
x = -1
for j in data['routes']:
x += 1
if(j['ports'][0] == route_code) or (j['ports'][1] == route_code):
print("inside of loop")
print(data['routes'][x])
print(x)
del data['routes'][x]
正如您所看到的,通过添加delete语句,if语句只达到了2次而不是3次。因此,包含[' Lim',' Mex' ]未删除。为什么会这样?
答案 0 :(得分:2)
试试这个:
data['routes'] = [
item for item in data['routes'] if route_code not in item['ports']
]
另请注意,如果您绝对想要遍历列表及其索引,则可以使用
for index, item = enumerate(data['routes']):
...
...但你甚至不需要索引。如果说print(data['routes'][x])
你可以说print(j)
。您遇到的问题是在循环播放时从列表中删除,这是危险的。