Python, удалите элемент JSON, имеющий определенный ключ из цикла - PullRequest
0 голосов
/ 05 сентября 2018

Используя Python, мне нужно удалить все объекты в массиве JSON, которые имеют конкретное значение ключа 'name'. Тем не менее, я не могу сделать это из цикла.

Imaging Я хочу удалить все элементы, имеющие «bad» в качестве имени в следующем входе:

{
  'myArray' : [
    {
      'name' : 'good',
      'value' : '1'
    },
    {
      'name' : 'bad',
      'value' : '2'
    }
  ]
}

Поэтому я использую следующий тестовый пример Python:

myData = {'myArray': [{'name': 'good', 'value': '1'}, {'name': 'bad', 'value': '2'}]}

for a in myData['myArray']:
  if (a['name'] =='bad'):
    del a

print(json.dumps(myData))

И я вижу, что myData не изменился.

Я предполагаю, что это потому, что я пытаюсь удалить итератор цикла, который интерпретатор может рассматривать как рискованное действие, однако Python не сообщает об ошибке или предупреждении во время выполнения.

Какой рекомендуемый подход в этом случае?

Спасибо!

Ответы [ 4 ]

0 голосов
/ 05 сентября 2018

Один из подходов из Удаление элемента из списка при использовании enumerate () в python - цикл над копией списка, называемого [:] - тоже работает:

for a in myData['myArray'][:]:
  if (a['name'] == u'bad'):
     myData['myArray'].remove(a)

Спасибо всем!

0 голосов
/ 05 сентября 2018

Вы можете использовать понимание списка. Ниже ссылка.

new_list =  [obj for obj in myData['myArray'] if(obj['name'] != 'bad')] 
print new_list
0 голосов
/ 05 сентября 2018
myData = {'myArray': [{'name': 'good', 'value': '1'}, {'name': 'bad', 'value': '2'}]}

myData_clean = [x for x in myData['myArray'] if x['name'] !='bad']
myData_clean = {'myArray':myData_clean}
print(myData_clean)

выход:

{'myArray': [{'name': 'good', 'value': '1'}]}
0 голосов
/ 05 сентября 2018

Используйте (вложенное) понимание слова / списка. Никогда не пытайтесь удалить элементы объекта во время итерации по нему

>>> [x for x in myData['myArray'] if x['name'] != 'bad']
[{'name': 'good', 'value': '1'}]

Присвойте результат myData['myArray'] или как хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...