Created
October 12, 2017 21:42
-
-
Save duarteguilherme/0b3fff39de2a60bb1f4eb2ec950298fd to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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