JSON: проблемы с редактированием файла JSON в Python

#python #arrays #json #dictionary

#python #массивы #json #словарь

Вопрос:

Что я хочу сделать, так это удалить массив, содержащий «Nike» в переменной «Shoe».
Вот файл Json:

 {
    "Shoes/Colorways":
    [
        {
            "Shoe": "Nike",
            "Colorway": "Blue"
        },
        {
            "Shoe": "Jordan",
            "Colorway": "Blue"
        }
    ]
}
 

Я хочу, чтобы конечный результат файла Json выглядел следующим образом:

 {
    "Shoes/Colorways":
    [
        {
            "Shoe": "Jordan",
            "Colorway": "Blue"
        }
    ]
}
 

Вот код, который я использовал, чтобы попытаться удалить массив с помощью «Nike»:

 import json

path = 'keywords.json'

with open(path, 'r') as f:
    data = json.load(f)

for info in data['Shoes/Colorways']:
    if info['Shoe'] == 'Nike':
        data.remove(info['Shoe'])
        data.remove(info['Colorway'])
    else:
        pass
print(data)
 

Вот ошибка:

 Traceback (most recent call last):
  File "c:UsersTestUserDesktopProjectsProgramsjson.py", line 10, in <module>
    data.remove(info['Shoe'])
AttributeError: 'dict' object has no attribute 'remove'
 

Я понял, что .remove это только для списков, и, похоже, я не могу понять, как сделать то, что мне нужно сделать в этом сценарии.

Ответ №1:

Попробуйте это:

 import json

path = 'keywords.json'

with open(path, 'r') as f:
    data = json.load(f)

data['Shoes/Colorways'] = [info for info in data['Shoes/Colorways'] if info['Shoe'] != 'Nike']

print(data)
 

Ответ №2:

Ошибка сообщает вам, .remove что не существует в объекте dict. Обратите внимание, что data это dict . Вы должны вызывать .remove список — data['Shoes/Colorways'] это список, из которого вам нужно удалить.

Однако было бы гораздо лучше просто использовать понимание списка, которое вместо этого отфильтровывает элемент

 data['Shoes/ColorWays'] = [x for x in data['Shoes/ColorWays'] if x['Shoe'] != 'Nike']
 

Ответ №3:

Операция удаления не существует в словаре. Лучше пропустить какое-то значение, которое не является необходимым.

  print([info for info in data['Shoes/Colorways'] if info['Shoe'] != 'Nike'])