Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
mymind

Dicionários

Recommended Posts

mymind

boas

BOM ANO para TODOS... :P

Vamos supor que tenho um dicionário com nome de frutas e respectivos preços quilo de cada tipo.....

supondo que gostaria de saber qual o tipo de fruta mais cara ....

eg:

pvenda_fruta={2:"bananas",4:"peras",5:"kiwis"}

   

    maior =max(pvenda_fruta.values())

e puff , realmente consegui o valor mais alto.

Agora a questão prende se com o seguinte, visto ja ter a key

gostaria de imprimir o valor acossiado a essa mesma key mas dando o valor atraves da variavel maior ...

tipo  print pvenda_fruta.get(maior)

desculpem estas perguntas de maçarico mas estou a tentar começar e como mts dizem o começo e smpr dificil....

tank s

Share this post


Link to post
Share on other sites
djthyrax

print maior, " = ", filter(lambda key: pvenda_fruta[key] == maior, pvenda_frutas.keys())[0], "€"

Para o teu exemplo, isto iria imprimir "kiwis = 5€". De notar que se tiveres várias keys com o mesmo value, o filter vai dar mais do que um resultado, e se esse produto não estiver na lista, este código vai lançar uma IndexKey exception. Aconselho-te a mudares o teu dict para pvenda_fruta = {"bananas": 2, "peras": 4, "kiwis": 5} para poderes ter vários produtos com o mesmo preço sem teres que usar listas/tuplas dentro do dicionário e complicar o teu código.

PS: Não testei o código.


Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Share this post


Link to post
Share on other sites
mymind

boas

A maneira como me sugeres para construir o dicionário e sem duvida a que tive inicialmente .

O problema foi que eu criava uma lista com as keys e depois achava o maior dessa lista...

o problema e que quando pretendia imprmir a key queria tambem imprimir o valor correspondente a essa key e não conseguia .....

mesmo agora olhando para o teu codigo ainda não consigo perceber bem como o fazer.... ou seja:

.....

pvenda_fruta={"Bananas":5,"peras":3,"kiwis":5}

   

    maiorpreco =int(max(pvenda_fruta.values()))

   

    print 'A fruta,' + pvenda_fruta[key] == maiorpreco +" = "+str(maiorpreco)

.....

se correr este codigo vai me dar erro , diz me que NameError: global name 'key' is not defined

agora tambem não percebi.

isto:

filter(lambda key: pvenda_fruta[key] == maior, pvenda_frutas.keys())[0]

filter vai filtrar .... lambdakey??? o que queres dizer com lambda key  e depois de verificares a igualdade ==

o pk de : pvenda_frutas.keys()) [0]--->este index não se deveria usar dentro dos parenti...????

tank s

Aproveitando o teu codigo sim consegui por a trabalhar mas não compreendi o que te relato em cima .....

def vendas_frutaria():

    fruta_stock={"bananas":10,"peras":20,"kiwis":30}

    pcompra_fruta={"bananas":1,"peras":2,"kiwis":3}

    pvenda_fruta={"Bananas":5,"peras":3,"kiwis":5}

   

    maiorpreco =int(max(pvenda_fruta.values()))

    print 'A fruta,'+str(maiorpreco)

    print 'A fruta: ',filter(lambda key: pvenda_fruta[key] == maiorpreco, pvenda_fruta.keys())," Custam "+str(maiorpreco)+" â¬, e sao as mais caras. "

Share this post


Link to post
Share on other sites
djthyrax

Ok, vou passar a explicar o raciocínio :P

O que o filter vai fazer é iterar as chaves do dicionário (for key in pvenda_fruta.keys()) e passa o key a uma função de controlo (lambda x: y é uma função anónima que recebe um argumento x e devolve o resultado da execução de y) que verifica se o pvenda_fruta[key] é igual ao maiorpreco e com as chaves em que essa verificação dá True ele cria uma lista.

Sem usar o filter, seria algo deste género:

precosComAqueleNome = []
for key in pvenda_fruta.keys():
    if pvenda_fruta[key] == maior:
        precoComAqueleNome.append(key)
print precosComAqueleNome[0] #mostra o preco do primeiro nome cujo preco é igual ao maior preco

Se usares o dicionário como eu te sugeri, podes fazer isto:

pvenda_fruta = {"bananas": 2, "kiwi": 4}

#parte onde se vai buscar os nomes com maior preco
nomesComMax_preco = [] #lista que leva os nomes
max_preco = max(pvenda_fruta.values()) #preco mais alto
for nome in pvenda_fruta.keys():
    if pvenda_fruta[nome] == max_preco:
        nomesComMax_preco.append(nome)

#mostrar o(s) produto(s) com preco mais alto
if len(nomesComMax_preco) == 1:
    print "O preco mais alto é do seguinte produto:"
else:
    print "O preco mais alto é dos seguintes produtos:"

for nome in nomesComMax_preco:
    print nome, " - ", pvenda_fruta[nome]


Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Share this post


Link to post
Share on other sites
mymind

Boas

Muito Obrigado pela atenção ... penso ter o assunto solidificado agora....

mais uma vez Obrigado

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.