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

时间:2009-08-20 11:07:59

标签: python ruby dictionary

我有一个字典,我们称之为myDict,在Python中包含一组类似的字典,这些字典都有条目“turned_on : True”或“turned_on : False”。我想删除myDict中关闭的所有条目,例如其中“turned_on : False”。在Ruby中我会做这样的事情:

myDict.delete_if { |id,dict| not dict[:turned_on] }

我应该如何在Python中执行此操作?

4 个答案:

答案 0 :(得分:7)

你的意思是这样吗?

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}}

答案 1 :(得分:5)

直接前进:

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

到目前为止,此页面上的其他答案会创建另一个词典。它们不会删除实际字典中的键。

答案 2 :(得分:3)

目前尚不清楚你想要什么,但我的猜测是:

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'])

答案 3 :(得分:1)

d = { 'id1':{'turned_on':True}, 'id2':{'turned_on':False}}
dict((i,j) for i, j in d.items() if not j['turned_on'])