mymind Posted January 2, 2010 at 01:00 PM Report Share #303654 Posted January 2, 2010 at 01:00 PM boas BOM ANO para TODOS... 😛 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 Link to comment Share on other sites More sharing options...
djthyrax Posted January 2, 2010 at 04:43 PM Report Share #303691 Posted January 2, 2010 at 04:43 PM 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! Link to comment Share on other sites More sharing options...
mymind Posted January 2, 2010 at 06:08 PM Author Report Share #303739 Posted January 2, 2010 at 06:08 PM 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. " Link to comment Share on other sites More sharing options...
djthyrax Posted January 2, 2010 at 07:42 PM Report Share #303764 Posted January 2, 2010 at 07:42 PM Ok, vou passar a explicar o raciocínio 😛 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! Link to comment Share on other sites More sharing options...
mymind Posted January 2, 2010 at 09:34 PM Author Report Share #303786 Posted January 2, 2010 at 09:34 PM Boas Muito Obrigado pela atenção ... penso ter o assunto solidificado agora.... mais uma vez Obrigado Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now