musicas = {'pink floyd': [{'nome':'dark side', ‘tipo':'pop','emprestado':False},{'nome':'wall','tipo':'pop','emprestado':True}], 'doors': [{'nome':'LA woman’,'tipo':'rock','emprestado':True},{'nome':'live','tipo':'rock','emprestado':False}], 'jethro tull':[{'nome':'thick as a brick','tipo': ‘rock','emprestado':False}]}Esta organização não pretende ser realista, mas apenas uma ajuda a compreender as operações sobre dicionários. Coloquei três questões para esta representação: (1) adicionar um album à base de dados de músicas; (2) Marcar um album como emprestado; (3) listar todas as músicas de um dado tipo. Vamos resolver por etapas.
No primeiro caso uma solução trivial será:
def acrescentar(dicio_musicas,autor,album): dicio_musicas[autor] = dicio_musicas.get(autor,[]) + [album]Como se pode ver uma simples instrução resolve o assunto. Notar que os dicionários são objectos mutáveis nos valores pelo que as alterações efectuadas são permanentes e não é obrigatório usar o return para devolver a nova versão do dicionário. Refira-se ainda neste caso apenas o método get ou o setdefault eram apropriados, garantindo que não há interrupção por erro caso o autor ainda não exista no dicionário.
Para o segundo caso apresentamos duas soluções:
def emprestar(dicio_musicas,autor,album): albuns = dicio_musicas.get(autor,[]) if albuns: for musica in albuns: if musica == album: musica['emprestado'] = True break def emprestar_b(dicio_musicas,autor,nome_musica): albuns = dicio_musicas.get(autor,[]) if albuns: for musica in albuns: if musica['nome'] == nome_musica: musica['emprestado'] = True breakNos dois casos verificamos se o autor existe e, depois, se o album existe. Passados estes dois testes fazemos a alteração. A primeira solução pressupõe que todo o album é fornecido como entrada, enquanto que no segundo caso apenas o nome do album é fornecido. Notar uma vez mais o não recurso a return.
Finalmente, para o terceiro problema:
def musicas_tipo(dicio_musicas, tipo): res = [] for albuns_autor in dicio_musicas.values(): # analisa musicas de um autor for album in albuns_autor: if album['tipo'] == tipo: res.append(album['nome']) return resAgora, executarmos um ciclo, por autor, em que os álbuns dos autores são analisados à vez.
Sem comentários:
Enviar um comentário