JSON删除错误

时间:2016-03-02 05:51:26

标签: python json indexing

我正在迭代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' ]未删除。为什么会这样?

1 个答案:

答案 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)。您遇到的问题是在循环播放时从列表中删除,这是危险的。