Próbuję napisać bardzo prostą funkcję rekursywnie przeglądać ewentualnie zagnieżdżone (w najbardziej skrajnych przypadkach głębokich dziesięć poziomów) słownika Python i powrócić pierwszej wartości stwierdzi z danego klawisza .Znalezienie klucza rekurencyjnie w słowniku
Nie mogę zrozumieć, dlaczego mój kod nie działa dla zagnieżdżonych słowników.
def _finditem(obj, key):
if key in obj: return obj[key]
for k, v in obj.items():
if isinstance(v,dict):
_finditem(v, key)
print _finditem({"B":{"A":2}},"A")
Zwraca None
.
To działa, jednak dla _finditem({"B":1,"A":2},"A")
, wracając 2
.
Jestem pewien, że to prosty błąd, ale nie mogę go znaleźć. Czuję, że może być coś takiego w standardowej bibliotece lub collections
, ale nie mogę tego znaleźć.
Należy zauważyć, że sprawdzenie, czy obiekt 'dict' jest złym pomysłem, ponieważ wyklucza obiekty typu" dict ". Zamiast tego, wykonaj 'try: ...' 'z wyjątkiem TypeError: ...'. (Poproś o wybaczenie, nie o pozwolenie). –
Należy również pamiętać, że od dicts są z natury nieuporządkowane, jeśli masz kilka klawiszy „A” w zagnieżdżonej strukturze, nigdy nie można wiedzieć, który z nich dostaniesz (jak pudełko czekoladek przypuszczam ...) W – mgilson
@mgilson ten konkretny przypadek, który jest w porządku i myślałem o tym. :) –