如何在Python中删除字典中带有特定标志的条目?

1 投票
4 回答
1425 浏览
提问于 2025-04-15 13:44

我有一个字典,叫做 myDict,里面包含了一些相似的字典,这些字典都有一个键值对 "turned_on : True" 或 "turned_on : False"。我想把 myDict 中所有状态为关闭的条目删除,也就是 "turned_on : False" 的那些条目。在 Ruby 里,我可以这样做:

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

那我在 Python 里该怎么做呢?

4 个回答

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

到目前为止,这个页面上的其他答案都是创建了一个新的字典。它们并没有删除你原来字典里的键。

撰写回答