需要一些有关从列表中的字典中删除元素的帮助

时间:2019-08-20 01:35:27

标签: python

我要删除内容为字典的列表元素

我创建了一个名为“ 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")                    

我希望函数的输出在删除元素时能正常工作,如果有人可以帮助我,我将非常感谢

2 个答案:

答案 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}]