#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'])