A solução trivial será:
def dicio_lista(lista_chaves_valores):
"""Constrói um dicionário a partir de uma lista com chaves e valores
alternados."""
dicio ={}
for i in range(len(lista_chaves_valores)/2):
dicio[lista_chaves_valores[2*i]] = lista_chaves_valores[2*i + 1]
return dicio
Mas podemos fazer melhor usando o método zip e o construtor para dicionários dict:
def dicio_lista_b(lista_chaves_valores):
"""Constrói um dicionário a partir de uma lista com chaves e valores
alternados."""
return dict(zip(lista_chaves_valores[::2], lista_chaves_valores[1::2]))
Nas duas soluções tivemos que lidar com a separação dos elementos em chaves e valores. As chaves estão nas posições pares e os valores nas posições ímpares da lista. Claramente preferimos a segunda!
professor eu percebi o objectivo do exercício, mas utilizaria, talvez por hábito, a primeira opção. Tenho mesmo com o exercicio exposto um certa dificuldade em compreender o comando zip, pois associava-o a uma matriz/lista e não a um dicionário. pelo que vejo utilizamos o zip(chave,valor) para formar o dicionário. Estou correcta?
ResponderEliminarObrigado.
O comando zip recebe como argumentos várias sequências e devolve uma lista de tuplos:
ResponderEliminar>>> s1 = (1,2,3)
>>> l2 = ['a','b','c']
>>> c3 = 'xyz'
>>> zip(s1,l2,c3)
[(1, 'a', 'x'), (2, 'b', 'y'), (3, 'c', 'z')]
>>>
Não está por isso "agarrado" a dicionários. Mas pode ser usado para construir dicionários. Mas é o construtor dict que fabrica o dicionário. Há muitas maneiras de construir um dicionário:
>>> d1 = {'a':1,'b': 2}
>>> d2 = dict(a=1,b=2)
>>> d1
{'a': 1, 'b': 2}
>>> d2
{'a': 1, 'b': 2}
>>> ## método usado no exemplo!
>>> lt = zip(l2,s1)
>>> lt
[('a', 1), ('b', 2), ('c', 3)]
>>> d3 = dict(lt)
>>> d3
{'a': 1, 'c': 3, 'b': 2}
>>>
estou agora a visitar o teu blog, que achei muito interessante - por falar em Python e iniciantes, aproveito para falar de programas como Shoebot e Nodebox, que pode encorajar imenso curiosos sobre a linguagem Python em experimentá-la mais a fundo, na diversão de se desenhar linhas e círculos, mais ou menos como o Proce55ing em relação ao Java.
ResponderEliminarÉ bom ter visitantes mesmo quando o blogue hibernou... É um blogue de apoio a uma disciplina do curso de Engenharia Informática da Universidade de Coimbra. Será reactivado em Setembro.Também tem alunos do curso de Design e Multimédia pelo que o recurso a algo semelhante a Processing era bem vindo. Conheço o Nodebox mas não é cross-platform. O Shoebot não conhecia. Vou explorar.
ResponderEliminarSou aluna do curso de Ciência da Computação. Sinto muita dificuldade em programação em python, pois consigo assimilar toda parte teórica, mas quando chega a hora de criar os programas me perco e não consigo criar. Assim sendo gostaria que se possível vc me desse uma dica do que fazer para melhorar. Obrigada
ResponderEliminarÉ difícil dar comentários gerais que não sejam banalidades abstractas. Pense num problema concreto que quer resolver, tente construir a solução em Python e envie para eu comentar. Pode tentar através do meu email: ernesto@dei.uc.pt.
Eliminar