Delete dict and subdict items of some name

Oscar Benjamin oscar.j.benjamin at gmail.com
Mon Dec 17 19:22:14 EST 2012


On 17 December 2012 23:44, Oscar Benjamin <oscar.j.benjamin at gmail.com> wrote:
> On 17 December 2012 23:08, MRAB <python at mrabarnett.plus.com> wrote:
>> Wouldn't a set of the id of the visited objects work?
>
> Of course it would. This is just a tree search.
>
> Here's a depth-first-search function:
>
> def dfs(root, childfunc, func):
>     '''depth first search on a tree
>     calls func(node) once for each node'''
>     visited = set()
>     visiting = OrderedDict()
>     visiting[id(root)] = it = iter([root])
>
>     while True:
>         try:
>             node = next(it)
>         except StopIteration:
>             try:
>                 node, it = visiting.popitem()
>             except KeyError:
>                 return
>         key = id(node)
>         if isinstance(node, dict) and key not in visited:
>             func(node)
>             visiting[key] = it = iter(childfunc(node))
>             visited.add(key)
>
> Now you can do:
>
> dfs(my_dict_tree, lambda x: x.pop('Favicon', None))

Slight correction:
dfs(g, lambda n: n.values(), lambda x: x.pop('Favicon', None))


Oscar



More information about the Python-list mailing list