从嵌套字典中删除多个键

2024-09-22 16:36:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一本大词典,我想把某些键去掉。我定义了一组不需要的键,比如说它叫做kunwanted。字典是这样的:

   mydic= {'user':{'key1':'12','key2':'20','key3':30},
          'status':{'newk':'12','user':{'key1':'12','key2':'20','key3':30}}}

所以,我把键'user'作为mydic的键,作为mydic的键['status']。假设在kunwanted我有“key1”和“key2”。显然,我可以在mydic中迭代2次以删除元素:

^{pr2}$

有没有更有效的方法来实现这一点?在


Tags: 方法元素字典定义statuskey2key1key3
3条回答

这里有一个递归方法:

#!/usr/local/cpython-3.3/bin/python

import pprint

def recursive_remover(unwanted_keys, dictionary):
    for key, value in list(dictionary.items()):
        if isinstance(value, dict):
            recursive_remover(unwanted_keys, value)

        if key in unwanted_keys:
            del dictionary[key]

def main():
    mydict={'user': {'key1':'12','key2':'20','key3':30},
           'status':{'newk':'12','user':{'key1':'12','key2':'20','key3':30}}}

    unwanted_keys = { 'key1', 'key2' }

    recursive_remover(unwanted_keys, mydict)

    pprint.pprint(mydict)

main()

另一种递归方法。在

def recursive_remove(u_keys, d):
    # Remove keys in current dict
    for unwanted_key in u_keys:
        try:
            del d[unwanted_key]
        except (KeyError, TypeError):
            continue
    # Try to iterate over the items in dict, continue if not iterable
    for key, value in d.iteritems():
        try:
            recursive_remove(u_keys, value)
        except AttributeError:
            continue


my_dict= {'user':{'key1':'12','key2':'20','key3':30},
          'status':{'newk':'12','user':{'key1':'12','key2':'20','key3':30}}}

u_keys = ['key1', 'key2']

recursive_remove(u_keys, my_dict)

我不确定我是否得到了正确的方法,以下可能会有所帮助

for elem in kunwanted:
    if elem in mydic['user']:
        del mydic['user'][elem]
        break #
    if elem in mydic['status']['user']:
        del mydic['status']['user'][elem]

相关问题 更多 >