当它是一个数字时,Python从字典中删除一个键

时间:2016-12-16 16:12:59

标签: python dictionary

我正在尝试迭代字典,以便删除密钥为数字的所有项目。

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

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

我需要的结果是:

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

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

4 个答案:

答案 0 :(得分:3)

您可以创建新词典,而不是在循环浏览字典时删除项目:

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

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

答案 1 :(得分:1)

如上所述,错误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类型的对象来说是一个非常糟糕的名称。

答案 2 :(得分:0)

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

试试这个:

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'}

答案 3 :(得分:0)

以下是使用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}