Skip to content

Instantly share code, notes, and snippets.

@duarteguilherme
Created October 12, 2017 21:42
Show Gist options
  • Save duarteguilherme/0b3fff39de2a60bb1f4eb2ec950298fd to your computer and use it in GitHub Desktop.
Save duarteguilherme/0b3fff39de2a60bb1f4eb2ec950298fd to your computer and use it in GitHub Desktop.
import urllib.request
import json
jsondata = json.loads(urllib.request.urlopen('https://reddit.com/.json').read())
# Dicionario guarda numero de cada estrutura de dados
count = { 'n_dicts': 0, 'n_lists': 0 }
def find_type(data):
""" Esta funcao itera por cada elemento da base de dados ('jsondata').
Se ela encontra algo que não seja dicionário ou lista, ela retorna False.
Se ela encontra uma lista, ela soma 1 no contador, e chama a funcao com recursao
para seus elementos filhos. Se for dicionário, faz algo semelhante, fazendo recursao
sobre cada elemento.
"""
print("Running...")
global count # Precisa ser definida como global para poder usar dicionario definido fora
if isinstance(data, list): # Testa se elemento é lista
count['n_lists'] += 1 # Soma 1 no contador de listas
for i in data:
find_type(i) # Itera sobre os elementos filhos da lista
elif isinstance(data, dict): # Testa se elemento é dicionário
count['n_dicts'] += 1 # Soma 1 no contador de dicionários
for i in data.keys(): # Itera sobre os elementos do dicionários
find_type(data[i]) # É importante notar que para iterar nos dicionários, precisamos definir as keys
else:
return False # Se não for list ou dict, retorna Falso
find_type(jsondata)
print(count)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment