【问题标题】:Removing keys from dictionary in Python [duplicate]从Python中的字典中删除键[重复]
【发布时间】:2016-06-11 03:42:01
【问题描述】:

我想从 Python 字典中删除一些键。密钥以列表形式提供;到目前为止我的代码:

my_keys = [2,4]
my_dict = {1:"aaaa" , 2: "bbb", 3:"ccc", 4:"ddd" }

for number in my_keys:
    for key, value in my_dict.items():
            if key == number:
                del my_dict[(key)]

【问题讨论】:

  • 为什么是第二个循环?为什么不简单地del my_dict[number]
  • @njzk2 大概是因为密钥可能在也可能不在字典中。
  • @ffledgling 好点

标签: python


【解决方案1】:

您可以使用 dict 理解,如下所示:

{x:y for x,y in my_dict.items() if x not in my_keys}

正如 e0k 和 njzk2 在 cmets 中所建议的,如果您愿意修改现有字典,则以下方法效果更好:

for key in my_keys:
    try:
        del my_dict[key]
    except KeyError:
        pass # Key wasn't in the dictionary at all.

【讨论】:

  • 修改现有的dict 可能比创建一个新的更有效。
  • @e0k 当然,njzk2 在他的评论中已经建议了,无论如何我都会添加它。
【解决方案2】:

下面是你如何做到这一点:

>>> my_keys = [2,4]
>>> my_dict = {1:"aaaa" , 2: "bbb", 3:"ccc", 4:"ddd" }
>>> for key in my_keys:
...     del my_dict[key]
... 
>>> my_dict
{1: 'aaaa', 3: 'ccc'}

附带说明:要删除键并获取值,请使用dict.pop

>>> x = my_dict.pop(1)
>>> x
'aaaa'
>>> my_dict
{3: 'ccc'}

【讨论】:

    【解决方案3】:

    您可以使用步长为 2 的范围,然后删除范围中每个值的每个键。也可以使用map,这个功能很棒。

    map(my_dict.pop, [2,4])
    

    如果您想捕获键不在字典中的错误,请使用 lambda 函数:

    map(lambda x: my_dict.pop(x, None), [2,4])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-22
      • 2018-02-06
      • 1970-01-01
      • 2023-01-08
      • 1970-01-01
      • 2021-12-22
      • 1970-01-01
      相关资源
      最近更新 更多