如何在python中删除具有给定标志的词典中的条目?
我有一个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
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中使用)。似乎可以保证所有的子目录
都有一个“打开”
键。添加该检查不需要花费任何费用,而且该函数现在更通用(可以在任何目录中使用)。