Python remove a key from dictionary when It's a number
本问题已经有最佳答案,请猛点这里访问。
我正试图遍历字典,以便删除键为数字的所有项。
1 2 3 4 5 | dict= {'hello':'3', 'baby':'5', '33':'6'} for k in dict.keys(): if k.isdigit(): del dict[k] |
我需要的结果是:
1 | dict={'hello':'3', 'baby':'5'} |
我使用上面的代码,但它不起作用?有人能帮我吗?
您可以创建一个新字典,而不是在遍历字典时删除项目:
1 2 3 4 | dict_ = {'hello':'3', 'baby':'5', '33':'6'} {k: v for k, v in dict_.items() if not k.isdigit()} # {'baby': '5', 'hello': '3'} |
正如前面所说的那样,由于在迭代过程中修改了措辞,所以会产生错误
1 2 3 4 5 | 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] |
另一个更像是Python式的,是在适当的地方建立措辞,例如在这个答案中使用强度符号的措辞。
顺便说一句,对于类型为
下面是另一个使用
1 2 3 | 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 |
输出:
1 2 | >> my_dict >> {'a': 1, 'b': 2, 'c': 3} |
问题是因为您在遍历时正在更新字典。而是先将键存储在列表中,然后从字典中删除。
试试这个:
1 2 3 4 5 6 7 | dic= {'hello':'3', 'baby':'5', '33':'6'} x=dic.keys() for k in x: if k.isdigit(): del dic[k] print dic |
输出:
1 | {'baby': '5', 'hello': '3'} |