Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python从字典中删除一个键,当它';这是一个数字_Python_Dictionary - Fatal编程技术网

Python从字典中删除一个键,当它';这是一个数字

Python从字典中删除一个键,当它';这是一个数字,python,dictionary,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'} 我使用上面的代码,但它不工作? 有人能帮我吗 您可以创建一个新字典,而不是在字典中循环时删除项目: dict_ = {'hello':'3', 'baby':'5',

我试图迭代字典,以便删除键为数字的所有项

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

for k in dict.keys():
    if k.isdigit():
       del dict[k]
我需要的结果是:

dict={'hello':'3', 'baby':'5'}
我使用上面的代码,但它不工作?
有人能帮我吗

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

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

{k: v for k, v in dict_.items() if not k.isdigit()}
# {'baby': '5', 'hello': '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

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

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

{k: v for k, v in dict_.items() if not k.isdigit()}
# {'baby': '5', 'hello': '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

错误
RuntimeError:dictionary在迭代过程中更改了大小,正如它所说的,由于dictionary在迭代过程中被修改,所以会出现错误。一种解决方案是首先注册所有密钥,然后修改措辞:

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风格的方法是在适当的位置构建字典,例如使用字典的强度表示法,如中所示


顺便说一句,
dict
对于类型为
dict

的对象来说是一个非常糟糕的名称。错误
RuntimeError:dictionary在迭代过程中更改了大小,正如上面所说的,因为dictionary在迭代过程中被修改,所以会出现。一种解决方案是首先注册所有密钥,然后修改措辞:

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风格的方法是在适当的位置构建字典,例如使用字典的强度表示法,如中所示


顺便说一句,
dict
对于类型为
dict

的对象是一个非常糟糕的名称。问题是因为您在遍历时正在更新字典。而是先将键存储在列表中,然后从字典中删除

试试这个:

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

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

试试这个:

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

下面是另一个解决方案,它使用
pop
map
修改原有词典

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

{k: v for k, v in dict_.items() if not k.isdigit()}
# {'baby': '5', 'hello': '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
输出:

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

下面是另一个解决方案,它使用
pop
map
修改原有词典

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

{k: v for k, v in dict_.items() if not k.isdigit()}
# {'baby': '5', 'hello': '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
输出:

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

当我运行你的代码时,它似乎工作得很好。另一方面,用基本的python类型(比如
dict
)命名变量在某种程度上会让你感到悲伤。当我运行你的代码时,这似乎工作得很好。另一方面,用基本python类型(如
dict
)命名变量在某种程度上会让您感到悲伤。注意:它不会删除原始
dict
中的项目。相反,返回带有过滤内容的新列表,但它是更好的方式注释:它不会删除原始
dict
中的项目。相反,返回带有过滤内容的新列表,但这是更好的方法,在python 3中,这仍然不适用于我
x=list(dic.keys())或tuple(dic.keys())
可能是最好的选择(尽管没有否决投票)。这在python 2中是有效的。您没有特别提到Python3需要它!在python 3中,这仍然不适用于我
x=list(dic.keys())或tuple(dic.keys())
可能是最好的选择(尽管没有否决投票)。这在python 2中是有效的。您没有特别提到Python3需要它!