【问题标题】:Python remove a key from dictionary when It's a number [duplicate]当它是一个数字时,Python从字典中删除一个键[重复]
【发布时间】:2017-05-02 11:37:24
【问题描述】:

我正在尝试遍历字典以删除键为数字的所有项目。

dict= {'hello':'3', 'baby':'5', '33':'6'}

for k in dict.keys():
    if k.isdigit():
       del dict[k]

我需要的结果是这样的:

dict={'hello':'3', 'baby':'5'}

我使用上面的代码,但它不起作用? 有人可以帮助我吗?

【问题讨论】:

  • 当我运行您的代码时,这似乎工作得很好。附带说明一下,以基本的 Python 类型(如 dict)命名变量有时会让你感到悲伤。

标签: python dictionary


【解决方案1】:

这是另一个使用popmap 修改就地您的初始字典的解决方案:

my_dict = {'a':1, 'b':2, 'c':3, '11':4, '12':5} 
_ = map(lambda k: my_dict.pop(k), [k for k in my_dict if k.isdigit()])
# The map functions modifies in place your dictionary

输出:

>> my_dict
>> {'a': 1, 'b': 2, 'c': 3}

【讨论】:

    【解决方案2】:

    您可以创建一个新字典,而不是在遍历字典时删除项目:

    dict_ = {'hello':'3', 'baby':'5', '33':'6'}
    
    {k: v for k, v in dict_.items() if not k.isdigit()}
    # {'baby': '5', 'hello': '3'}
    

    【讨论】:

    • 注意:不会删除原dict中的项目。而是返回带有过滤内容的新列表
    • 但这是更好的方法
    【解决方案3】:

    问题是因为您在遍历时正在更新字典。而是先将键存储在列表中,然后从字典中删除。

    试试这个:

    dic= {'hello':'3', 'baby':'5', '33':'6'}
    
    x=dic.keys()
    for k in x:
        if k.isdigit():
           del dic[k]
    print dic
    

    输出:

    {'baby': '5', 'hello': '3'}
    

    【讨论】:

    • 这对我在 python 3 中仍然不起作用。x = list(dic.keys()) or tuple(dic.keys()) 可能是要走的路(虽然没有投反对票)。
    • 这在 python 2 中有效。你没有提到任何地方需要它专门用于 python 3!
    【解决方案4】:

    正如它所说,错误RuntimeError: dictionary changed size during iteration 是因为在迭代期间修改了字典而引发的。一种解决方案是先注册所有键,然后修改字典:

    dict= {'hello':'3', 'baby':'5', '33':'6'}
    
    for k in tuple(dict.keys()):  # iterate on a tuple of values that happened to be in dict's keys
        if k.isdigit():
           del dict[k]
    

    另一个更 Pythonic 的方法是在适当的位置构建字典,例如在 this answer 中使用内涵表示法中的字典。

    顺便说一句,dict 对于dict 类型的对象来说是一个非常糟糕的名称。

    【讨论】:

      猜你喜欢
      • 2011-07-23
      • 1970-01-01
      • 2020-02-10
      • 2016-07-07
      • 1970-01-01
      • 2022-08-08
      • 1970-01-01
      • 2021-11-11
      • 2016-06-11
      相关资源
      最近更新 更多