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需要它!