GVKun编程网logo

如何从Python字典中删除键?(python 字典删除键)

25

此处将为大家介绍关于如何从Python字典中删除键?的详细内容,并且为您解答有关python字典删除键的相关问题,此外,我们还将为您介绍关于Ptython-在迭代字典时如何从字典中删除项目?、pyth

此处将为大家介绍关于如何从Python字典中删除键?的详细内容,并且为您解答有关python 字典删除键的相关问题,此外,我们还将为您介绍关于Ptython-在迭代字典时如何从字典中删除项目?、python – 从字典中删除NoneTypes、python – 使用for循环从字典中删除项目、Python-在迭代字典时如何从字典中删除项目?的有用信息。

本文目录一览:

如何从Python字典中删除键?(python 字典删除键)

如何从Python字典中删除键?(python 字典删除键)

从字典中删除键时,我使用:

if ''key'' in myDict:    del myDict[''key'']

有没有一种方法可以做到这一点?

答案1

小编典典

要删除键而不管它是否在字典中,请使用以下两个参数的形式dict.pop()

my_dict.pop(''key'', None)

my_dict[key]如果key字典中存在,则返回,None否则返回。如果第二个参数未指定(即my_dict.pop(''key''))并且key不存在,KeyError则引发a。

要删除肯定存在的密钥,你还可以使用

del my_dict[''key'']

KeyError如果关键字在字典中不存在,则会引发a

Ptython-在迭代字典时如何从字典中删除项目?

Ptython-在迭代字典时如何从字典中删除项目?

如何解决Ptython-在迭代字典时如何从字典中删除项目??

此答案不适用于python3,并且会给出RuntimeError

RuntimeError:字典在迭代过程中更改了大小。

发生这种情况是因为mydict.keys()返回的是迭代器而不是列表。正如评论中指出的那样,只需将其转换mydict.keys()为列表即可list(mydict.keys()),它应该可以工作。

控制台中的一个简单测试显示,在迭代字典时你无法修改字典:

>>> mydict = {''one'': 1, ''two'': 2, ''three'': 3, ''four'': 4}
>>> for k, v in mydict.iteritems():
...    if k == ''two'':
...        del mydict[k]
...
------------------------------------------------------------
Traceback (most recent call last):
  File "<ipython console>", line 1, in <module>
RuntimeError: dictionary changed size during iteration

如delnan的回答所述,当迭代器尝试移至下一个条目时,删除条目会导致问题。而是使用keys()方法获取键列表并进行处理:

>>> for k in mydict.keys():
...    if k == ''two'':
...        del mydict[k]
...
>>> mydict
{''four'': 4, ''three'': 3, ''one'': 1}

如果需要根据项目值删除,请使用items()方法:

>>> for k, v in mydict.items():
...     if v == 3:
...         del mydict[k]
...
>>> mydict
{''four'': 4, ''one'': 1}

解决方法

在Python上进行迭代时从字典中删除项目是否合法?

例如:

for k,v in mydict.iteritems():
   if k == val:
     del mydict[k]

这个想法是从字典中删除不满足特定条件的元素,而不是创建一个新字典,该字典是正在迭代的字典的子集。

这是一个好的解决方案吗?有没有更优雅/更有效的方法?

python – 从字典中删除NoneTypes

python – 从字典中删除NoneTypes

在任何人提到它之前,我已经遍布stackoverflow和谷歌找到答案,我相信我可能只是做错了.

我正在废弃一个xml文档,并使用BeautifulSoup4将值放入变量中.现在我正在读取报废到字典中的值并遍历字典以查找我需要的值,但是,当我想将这些值打印到带有模板的报表中时,我收到以下错误:

TypeError: coercing to Unicode: need string or buffer,nonetype found

我发现的是将None值作为我字典中的值之一的结果.解决方案:我一直试图在python 2.7中迭代我的字典以删除或替换nonetype值,但似乎没有任何效果.我发现的一些解决方案是过滤器(None,list)函数,for k,v in dictionary:
如果v in not None:list.append(item),clean = [x for x in list in x!= None],使用lambda,依此类推.他们似乎都没有工作让我相信我一定做错了.例如,这是我设置字典的方式:

itemDict = []

  for item in soup3.find_all(''XMLTag''):
    r = {
        ''deFinition1'': item.Starttag.string,''deFinition2'': item.Stoptag.string,''deFinition3'': item.Filltag.string,''deFinition4'': item.Stoptag2.string,}
    itemDict.append(r)

但是通过它来移除或替换itemDict中的nonetypes一直很痛苦.我计划的最终结果是将字典中的项目放入一段模板代码中作为报告打印,例如“”“< Description>”“”item [0] [‘deFinition4’]“”“ < /说明> “中”,”.有什么想法吗?

编辑:

由于Martijn Pieters和Steve Jessop,解决方案实际上非常简单.

itemDic = []

for newdic in soup3.find_all("XMLTag"):
s = {
    ''deFinition1'': newdic.Order.string,''deFinition1'': newdic.Code.string,''deFinition1'': newdic.Description.string,}

for k in s:
    if s[k] is None:
        s[k] = ''''

itemDic.append(s)

这替换了使用带有空字符串的BeautifulSoup4从XML scrape中发现的所有nonetype.类似地,上面的代码也可以替换用户对给定条件所需的任何其他值.所以例如,如果我想将“神话般的”每个实例更改为“它只是好的”,我会将’None’替换为’fabulous’和空字符串,”,’它只是没关系’和中提琴!再次感谢你们.

解决方法

r = {
    ''deFinition1'': item.Starttag.string,}

new_r = dict((k,v) for k,v in r.iteritems() if v is not None)

但是看起来好像你以后要编写new_r [‘deFinition4’],所以删除没有条目的键只会将异常更改为另一个.您应该做出关于丢失数据的实际决定;-)

python – 使用for循环从字典中删除项目

python – 使用for循环从字典中删除项目

参见英文答案 > deleting entries in a dictionary based on a condition                                    1个
如果密钥的值低于某个阈值,我正试图从字典中删除项目.举个简单的例子我的意思是:

my_dict = {'blue': 1,'red': 2,'yellow': 3,'green': 4}

for color in my_dict:
    threshold_value = 3
    if my_dict[color] < threshold_value:
        del my_dict[color]

print(my_dict)

现在,我得到一个RuntimeError:字典在迭代错误期间改变了大小.没有什么大惊喜.我发布这个问题的原因是:

>找出是否有一个优雅的解决方案,不需要创建一个新的字典(只包含值> gt; =阈值的键).
>尝试在此处了解Python的基本原理.我给自己读的方法是:“转到第一个键.该键的值是< x?if yes - del this key:value item并继续在字典中的下一个键,如果没有 - 继续没有做任何事情的下一把钥匙.换句话说,历史上发生在以前的键上的事情不应该影响我下一步的去向.无论过去如何,我都期待着接下来的项目.
我知道这很有趣(有些人可能会说愚蠢,我会给你这个)但是Python对这个循环的“思考方式”是什么?为什么不起作用? Python如何大声读出它?只是想更好地理解语言……

最佳答案
由于Python字典是作为哈希表实现的,因此您不应该依赖它们具有任何类型的顺序.密钥顺序可能无法预测地改变(但仅在插入或移除密钥之后).因此,无法预测下一个关键. Python会抛出RuntimeError以确保安全,并防止人们遇到意外结果.

Python 2的dict.items方法返回键值对的副本,因此您可以安全地迭代它并删除键不需要的值,如注释中建议的@wim.例:

for k,v in my_dict.items():
    if v < threshold_value:
        del my_dict[k]

但是,Python 3的dict.items返回view object,它反映了对字典所做的所有更改.这就是上面的解决方案仅适用于Python 2的原因.您可以将my_dict.items()转换为list(元组等)以使其与Python 3兼容.

解决问题的另一种方法是选择要删除的密钥,然后将其删除

keys = [k for k,v in my_dict.items() if v < threshold_value]
for x in keys:
    del my_dict[x]

这适用于Python 2和Python 3.

Python-在迭代字典时如何从字典中删除项目?

Python-在迭代字典时如何从字典中删除项目?

在Python上进行迭代时从字典中删除项目是否合法?

例如:

for k, v in mydict.iteritems():   if k == val:     del mydict[k]

这个想法是从字典中删除不满足特定条件的元素,而不是创建一个新字典,该字典是正在迭代的字典的子集。

这是一个好的解决方案吗?有没有更优雅/更有效的方法?

答案1

小编典典

此答案不适用于Python3,并且会给出RuntimeError

RuntimeError:字典在迭代过程中更改了大小。

发生这种情况是因为mydict.keys()返回的是迭代器而不是列表。正如评论中指出的那样,只需将其转换mydict.keys()为列表即可list(mydict.keys()),它应该可以工作。

控制台中的一个简单测试显示,在迭代字典时你无法修改字典:

>>> mydict = {''one'': 1, ''two'': 2, ''three'': 3, ''four'': 4}>>> for k, v in mydict.iteritems():...    if k == ''two'':...        del mydict[k]...------------------------------------------------------------Traceback (most recent call last):  File "<ipython console>", line 1, in <module>RuntimeError: dictionary changed size during iteration

如delnan的回答所述,当迭代器尝试移至下一个条目时,删除条目会导致问题。而是使用keys()方法获取键列表并进行处理:

>>> for k in mydict.keys():...    if k == ''two'':...        del mydict[k]...>>> mydict{''four'': 4, ''three'': 3, ''one'': 1}

如果需要根据项目值删除,请使用items()方法:

>>> for k, v in mydict.items():...     if v == 3:...         del mydict[k]...>>> mydict{''four'': 4, ''one'': 1}

今天关于如何从Python字典中删除键?python 字典删除键的讲解已经结束,谢谢您的阅读,如果想了解更多关于Ptython-在迭代字典时如何从字典中删除项目?、python – 从字典中删除NoneTypes、python – 使用for循环从字典中删除项目、Python-在迭代字典时如何从字典中删除项目?的相关知识,请在本站搜索。

本文标签: