首页 > 解决方案 > 尝试从循环中的字典中弹出 KV 对时出错

问题描述

我有一本看起来像这样的字典:

{'1A': {'White Bread loaf large': 1, 'Brown Bread loaf large': 1, 'Skimmed Milk Pint': 1, 'Cheddar Cheese Medium 300g': 1, 'Tomatoes Fresh Vine 500g': 1, 'Carrots 1Kg': 1, 'Potatoes 600g': 1, 'Bacon 300g': 1, 'Eggs Free Range Medium 12': 1, 'Ham 300g': 1, 'Frozen Peas 800g': 1, 'Kitchen Roll 200 Sheets': 1}, 
'1B': {'Brown Bread loaf large': 1, 'Bread Sliced White large': 1, 'Skimmed Milk Pint': 1, 'Cheddar Cheese Mature 300g': 1, 'Tomatoes Plum Can 500g': 1, 'Carrots 1Kg': 1, 'Potatoes 600g': 1, 'Rice White 500g': 1, 'Rice Brown 500g': 1, 'Butter 500g': 1, 'Bacon 300g': 1, 'Ham 300g': 1, 'Frozen Peas 800g': 1, 'Fresh onions 300g': 1, 'Tea Bags 50 pack': 1},...

我正在尝试删除密钥等于“Rice Brown 500g”的所有 KV 对。

这就是我尝试这样做的方式:

for i in list(my_dict):
    for n in my_dict[i]:
        if n == 'Rice Brown 500g':
            my_dict.pop(n)

我也尝试过使用del my_dict[n]

我不断收到此错误:KeyError: 'Rice Brown 500g'

我不知道还有什么可以尝试的。提前致谢

标签: pythondictionarydel

解决方案


我会建议一种更简单、更 Pythonic 的方式来遍历主字典中的子字典:

for v in my_dict.values():
    v.pop('Rice Brown 500g', None)

这可以解决问题,每个 v 都是子目录之一,pop() 的第二个参数可以防止 KeyError。


推荐阅读