Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.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,假设python dict: mydict = {'a': 100, 'b': 200, 'c': 300} 我知道其中一个价值观: value = 200 如何从dict中删除'b':200对?我需要这个: mydict = {'a': 100, 'c': 300} 使用一个。请注意(正如jonrsharpe所述),这将创建一个新字典,其中不包括要删除的key:value对。如果你想把它从你原来的字典中删除,那么请看他的答案 >>> d = {'a': 100, 'b'

假设python dict:

mydict = {'a': 100, 'b': 200, 'c': 300}
我知道其中一个价值观:

value = 200
如何从dict中删除
'b':200
对?我需要这个:

mydict = {'a': 100, 'c': 300}
使用一个。请注意(正如jonrsharpe所述),这将创建一个新字典,其中不包括要删除的key:value对。如果你想把它从你原来的字典中删除,那么请看他的答案

>>> d = {'a': 100, 'b': 200, 'c': 300}
>>> val = 200
# Use d.items() for Python 2.x and d.iteritems() for Python 3.x
>>> d2 = {k:v for k,v in d.items() if v != val}
>>> d2
{'a': 100, 'c': 300}
使用一个。请注意(正如jonrsharpe所述),这将创建一个新字典,其中不包括要删除的key:value对。如果你想把它从你原来的字典中删除,那么请看他的答案

>>> d = {'a': 100, 'b': 200, 'c': 300}
>>> val = 200
# Use d.items() for Python 2.x and d.iteritems() for Python 3.x
>>> d2 = {k:v for k,v in d.items() if v != val}
>>> d2
{'a': 100, 'c': 300}

听起来你想要:

for key, val in list(mydict.items()):
    if val == value:
        del mydict[key]
        break # unless you want to remove multiple occurences

听起来你想要:

for key, val in list(mydict.items()):
    if val == value:
        del mydict[key]
        break # unless you want to remove multiple occurences

您需要使用dict comprehension对每个items()进行循环:

new_dict = {k:v for k,v in my_dict.items() if predicate(value)}
或修改现有词典:

for k,v in my_dict.items():
    if not predicate(v):
        del my_dict[k]

您需要使用dict comprehension对每个items()进行循环:

new_dict = {k:v for k,v in my_dict.items() if predicate(value)}
或修改现有词典:

for k,v in my_dict.items():
    if not predicate(v):
        del my_dict[k]
我发现最简单的方法是:

for key in [k for k,v in mydict.items() if v==200]:
    del mydict[key]
我发现最简单的方法是:

for key in [k for k,v in mydict.items() if v==200]:
    del mydict[key]


你不应该创建一个名为
dict
的字典,它会覆盖内置的。你说得对,它只是一个伪解码。重命名它。可能的副本您不应该创建名为
dict
的字典,它将覆盖内置的。您是对的,它只是一个伪解码。重命名它。请注意,这将生成一个新字典(不包括该值),而不是将其从原始字典中删除,这是正确的。一个后续问题:这似乎是对整个dict的迭代。我不能迭代到找到第一个值的点吗?如果您知道字典中只有一个key:value对,那么我建议jonrsharpe的答案(或类似的创建新字典)。然后,您可以在第一个实例上断开。在任何情况下,您都需要使用适当的
for
循环,而不是dict理解。请注意,这将生成一个新的字典,排除该值,而不是将其从原始字典中删除。这是正确的。一个后续问题:这似乎是对整个dict的迭代。我不能迭代到找到第一个值的点吗?如果您知道字典中只有一个key:value对,那么我建议jonrsharpe的答案(或类似的创建新字典)。然后,您可以在第一个实例上断开。在任何情况下,你都需要对循环使用适当的
,而不是听写理解。就是这样!我可以在del之后中断
。这就是我想要的,谢谢。@pythonishvili:不,它只是一个常规的python函数或表达式,您需要定义它就是这样!我可以在del之后中断。这就是我想要的,谢谢。@pythonishvili:不,这只是一个需要定义的常规python函数或表达式。修改我当前迭代的dict可以吗?这就是使用
mydict.items()
的原因吗?在python3中,此解决方案失败(
RuntimeError:dictionary在迭代过程中更改了大小
),因为mydict.items()返回的是一个迭代器,而不是像python2一样的列表。@pbacterio在3.3.2中对我来说运行良好-您使用的是哪个版本?抱歉,我在测试时没有使用
break
语句来删除多个事件。在这种情况下,我建议将
mydict.items()
list
进行包装,以防止出现此异常。是否可以修改我当前迭代的dict?这就是使用
mydict.items()
的原因吗?在python3中,此解决方案失败(
RuntimeError:dictionary在迭代过程中更改了大小
),因为mydict.items()返回的是一个迭代器,而不是像python2一样的列表。@pbacterio在3.3.2中对我来说运行良好-您使用的是哪个版本?抱歉,我在测试时没有使用
break
语句来删除多个事件。在本例中,我建议使用
list
mydict.items()
进行包装,以防止出现此异常。我没有否决你的意见,但你不必要地创建了一个列表理解,而你只是在重复。应改用gen expr。我将您的投票结果提升回零我不使用生成器,因为如果您尝试删除多个事件,可能会产生错误。我没有对您进行否决,但您不必要地创建了一个列表理解,您只是在重复。应改用gen expr。我将您的投票结果提高到零。我不使用生成器,因为如果您尝试删除多个事件,可能会产生错误。