我要删除内容为字典的列表元素
我创建了一个名为“ del_product(product):”的函数,并尝试了多种方法来删除该元素,但是最终以KeyError结束
def del_product(product):
found=False
for lis in productos:
for dic in lis.values():
if product in lis.values():
flag=True
del(lis[product])
return lis
print(f"{product} deleted successfully") if found==True else print("{product} not found")
我希望函数的输出在删除元素时能正常工作,如果有人可以帮助我,我将非常感谢
答案 0 :(得分:0)
您似乎想在删除项目之前先创建found = True
,但实际上是引用了另一个名为flag
的变量名。可能还有其他问题,但是我在这里看到的最大的问题是将flag
设置为True
而不是found
。
此外,您希望在完成后打印某些内容,但是您要打印的语句位于return
运算符之后。调用return
将退出您的函数。这意味着将永远无法达到打印语句。
因此,最后,将flag
更改为found
,然后将if / else打印语句移动到之前 return lis
,否则这些打印无法执行。
答案 1 :(得分:0)
调用字典值时的正确格式为:dict[key]
,而您调用的是dict[value]
。这就是为什么您获得KeyError
的原因。
您应该提供数据样本和预期的输出,以便更快地做出响应。
这是我基于您的代码的示例:
productos = [{"key1":0, "key2":1}, {"key1":0, "key2":"pro"}]
def del_pro(val):
for dic in productos:
for k in dic.keys():
if dic[k] == val:
print(dic)
del(dic[k])
return dic
>>>del_pro("pro")
{'key1': 0, 'key2': 'pro'}
{'key1': 0}
>>>productos
[{'key1': 0, 'key2': 1}, {'key1': 0}]