Python :Как я могу отфильтровать -вложенный словарь словарей по конечному значению?

У меня есть словарь, который выглядит примерно так:

d = {'Food': {'Fruit'  : {'Apples'    : {'Golden Del.'  : ['Yellow'],
                                         'Granny Smith' : ['Green'],
                                         'Fuji'         : ['Red'],    
                                        },
                          'Cherries'  : ['Red'],
                          'Bananas'   : ['Yellow'],
                          'Grapes'    : {'Red Grapes'   : ['Red'],
                                         'Green Grapes' : ['Green'],  
                                        },
                          },
              'Dessert': {'Baked Ds' : {'Cakes'         : {'Yellow Cake' : ['Yellow'],
                                                           'Red Velvet'  : ['Red'],
                                                          },
                                         'Cookies'      : ['Yellow'],
                                        },
                          },
              'Steak'  : ['Red'],
             },
     'Other': ['Blue'],
    }

Таким образом, в основном это вложенный словарь n -, где каждое значение является либо другим словарем, либо списком, содержащим один элемент.

Допустим, я хочу отфильтровать это по одному элементу списка, скажем, «Красный», чтобы результат был:

d = {'Food': {'Fruit'  : {'Apples'    : {'Fuji'        : ['Red'],    
                                        },
                          'Cherries'  : ['Red'],
                          'Grapes'    : {'Red Grapes'  : ['Red'], 
                                        },
                          },
              'Dessert': {'Baked Ds' : {'Cakes'        : {'Red Velvet'  : ['Red'],
                                                          },
                                        },
                          },
              'Steak'  : ['Red'],
             },
    }

Таким образом, структура остается прежней, но все, что не имеет «красного» в качестве элемента списка, удаляется на всем пути вверх по иерархии.

Какие-либо предложения? Я некоторое время возился с этим и придумал это, но, похоже, это не работает:

def filterNestedDict(node, searchItem):
    if isinstance(node,list):
        return node
    else:
        for key, value in node.iteritems():
            if isinstance(value,dict) and value is not {}:
                return {key: filterNestedDict(value,searchItem)}
            elif searchItem in value:
                return {key: filterNestedDict(value,searchItem)}

return filterNestedDict(bigTree, searchItem)

Я подозреваю, что это просто проблема рекурсии, но любые предложения будут очень признательны.

Спасибо!

7
задан user1476107 25 June 2012 в 13:08
поделиться