Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

mymind

Dicionários

Mensagens Recomendadas

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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. "

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.