Próbuję przemierzać każdy węzeł? obiektu JSON w Pythonie. Próbuję wdrożyć funkcję rekurencyjną jak

def function(data):
         for element in data:
                --- do something----
                if (some condition):
                        function(element)

Chcę wiedzieć, jak mogę znaleźć, jeśli przedmiot przedmiotowy jest inny obiekt lub tylko ciąg. To jest, co powinienem pisać zamiast "jakiś warunek" w moim powyżej kodzie. Podobnie jak kiedy połączę XML, sprawdzam, czy ma jakieś dzieci za pomocą GetChildren () i jeśli tak, rekurencyjnie nazywam funkcję ponownie .....

2
Adnan 9 grudzień 2011, 19:54

3 odpowiedzi

Najlepsza odpowiedź

Dobry sposób na to, że może to być coś takiego:

def function(data):
   try:
      for element in data:
         --- do something----
         function(element)
   except TypeError:
      pass

Wykonaj rzeczy i niech Python podniósł wyjątek, jeśli próbujesz iterować coś, co nie jest iterable;)

1
Cédric Julien 9 grudzień 2011, 16:04

Korzystanie z type jest generalnie zmarszczą w Pythonie na korzyść bardziej funkcjonalnego isinstance. Możesz także przetestować wiele typów jednocześnie przy użyciu isinstance:

if isinstance(myVar, (list, tuple)):
  # Something here.
1
g.d.d.c 9 grudzień 2011, 16:00

Możesz użyć funkcji type(var), aby sprawdzić, czy element jest słownikiem lub listą.

def recurse(data):
    for element in data:
        if type(element) is list or type(element) is dict:
            recurse(element)
        else:
            # do something with element
            pass
0
Ross 9 grudzień 2011, 15:56