2016-03-02 1 views
1

Я выполняю итерацию через файл JSON и удаляя элементы, если они имеют индекс, равный коду города, который в моем случае, route_code = 'LIM', он будет удален. Вот мой код, ничего не удаляя:Ошибка удаления JSON

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] 

Теперь, вот моя возвращаемое значение:

inside of loop 
{'distance': 2453, 'ports': ['SCL', 'LIM']} 
0 
inside of loop 
{'distance': 1879, 'ports': ['LIM', 'BOG']} 
1 
Left for loop 
[{'distance': 4231, 'ports': ['LIM', 'MEX']}, {'distance': 2499, 'ports':  ['MEX', 'LAX']}, {'distance': 2714, 

Как вы можете видеть, добавив оператор delete, оператор if был достигнут только 2 раза вместо 3. Поэтому индекс, содержащий ['Lim', 'Mex'], не удаляется. Почему это происходит?

ответ

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). Проблема, с которой вы сталкиваетесь, заключается в удалении из списка во время цикла, что является опасным.

Смежные вопросы