Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.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_Ruby_Dictionary - Fatal编程技术网

如何在python中删除具有给定标志的词典中的条目?

如何在python中删除具有给定标志的词典中的条目?,python,ruby,dictionary,Python,Ruby,Dictionary,我有一个Python词典,我们称之为myDict,它包含一组类似的词典,它们都有一个条目“打开:True”或“打开:False”。我想删除myDict中所有关闭的条目,例如“打开:False”的位置。在Ruby中,我会这样做: myDict.delete_if { |id,dict| not dict[:turned_on] } 我应该如何在Python中实现这一点?直截了当的方式: def delete_if_not(predicate_key, some_dict): for ke

我有一个Python词典,我们称之为
myDict
,它包含一组类似的词典,它们都有一个条目“
打开:True
”或“
打开:False
”。我想删除
myDict
中所有关闭的条目,例如“
打开:False
”的位置。在Ruby中,我会这样做:

myDict.delete_if { |id,dict| not dict[:turned_on] }
我应该如何在Python中实现这一点?

直截了当的方式:

def delete_if_not(predicate_key, some_dict):
    for key, subdict in some_dict.items():
        if not subdict.get(predicate_key, True):
            del some_dict[key]
测试:

mydict = {
        'test1': {
                'turned_on': True,
                'other_data': 'foo',
            },
        'test2': {
            'turned_on': False,
            'other_data': 'bar',
            },
        }
delete_if_not('turned_on', mydict)
print mydict
到目前为止,本页上的其他答案创建了另一个dict。它们不会删除实际dict中的键。

直接方式:

def delete_if_not(predicate_key, some_dict):
    for key, subdict in some_dict.items():
        if not subdict.get(predicate_key, True):
            del some_dict[key]
测试:

mydict = {
        'test1': {
                'turned_on': True,
                'other_data': 'foo',
            },
        'test2': {
            'turned_on': False,
            'other_data': 'bar',
            },
        }
delete_if_not('turned_on', mydict)
print mydict

到目前为止,本页上的其他答案创建了另一个dict。它们不会删除实际dict中的键。

不清楚您想要什么,但我猜:

myDict = {i: j for i, j in myDict.items() if j['turned_on']}
或者对于较旧版本的python:

myDict = dict((i, j) for i, j in myDict.iteritems() if j['turned_on'])

不清楚你想要什么,但我猜:

myDict = {i: j for i, j in myDict.items() if j['turned_on']}
或者对于较旧版本的python:

myDict = dict((i, j) for i, j in myDict.iteritems() if j['turned_on'])
你是说像这样

myDict = {"id1" : {"turned_on": True}, "id2" : {"turned_on": False}}
result = dict((a, b) for a, b in myDict.items() if b["turned_on"])
输出:

{'id1': {'turned_on': True}}
你是说像这样

myDict = {"id1" : {"turned_on": True}, "id2" : {"turned_on": False}}
result = dict((a, b) for a, b in myDict.items() if b["turned_on"])
输出:

{'id1': {'turned_on': True}}


您在
id2
中有打字错误吗?您实际上没有关闭钥匙,是吗?是的。谢谢你指出!您在
id2
中有打字错误吗?您实际上没有关闭钥匙,是吗?是的。谢谢你指出<代码>关闭只是问题中的输入错误。
关闭
只是问题中的输入错误。这是Python3.0吗?当然,你不能在2.5中进行“dict理解”,Python 3.0是Python的一个稳定版本。我已经为那些不能扩展这种基本语法的降级投票者添加了py2k版本。@SilentGhost:虽然我不会降级,但python 3还没有被广泛使用,因为缺少有用的第三方库来完成简单的事情,比如连接到一些RDBMS,因此,提供一个只有py3的答案暂时是不受欢迎的。@nosklo:我的失望是针对那些不能看穿这种透明语法的人。py3k已经发布了将近9个月,是python的一个稳定版本,只提供了2k版本,你们不认为这也应该受到反对吗。按照这个速度,py3k将在本世纪末被采用。@SilentGhost:好吧,Python2.x版本在Python3上运行得很好,所以它不会受到反对。即使是这样,除非明确指出,否则假设每个人都在使用2.x仍然是合理的,因为3.x仍然很难用于严肃的东西。这是Python3.0吗?当然,你不能在2.5中进行“dict理解”,Python 3.0是Python的一个稳定版本。我已经为那些不能扩展这种基本语法的降级投票者添加了py2k版本。@SilentGhost:虽然我不会降级,但python 3还没有被广泛使用,因为缺少有用的第三方库来完成简单的事情,比如连接到一些RDBMS,因此,提供一个只有py3的答案暂时是不受欢迎的。@nosklo:我的失望是针对那些不能看穿这种透明语法的人。py3k已经发布了将近9个月,是python的一个稳定版本,只提供了2k版本,你们不认为这也应该受到反对吗。按照这个速度,py3k将在本世纪末被采用。@SilentGhost:好吧,Python2.x版本在Python3上运行得很好,所以它不会受到反对。即使是这样,除非明确指出,否则假设每个人都在使用2.x仍然是合理的,因为3.x仍然很难用于严肃的东西。似乎可以保证所有
子部分都有一个
“开启”
键。添加检查不会花费任何成本,而且该函数现在更通用(可以在任何dict中使用)。似乎可以保证所有的
子目录
都有一个
“打开”
键。添加该检查不需要花费任何费用,而且该函数现在更通用(可以在任何目录中使用)。