#fonte: https://www.udemy.com/python-expert/learn/v4/t/lecture/4835628
#------------------------------------------------------------------------------

# Calculo com dicionarios (mapeamento do conjunto chave/valor - associacao cahve/valor)

d = { 'tv':3500, 'notebook':3000, 'iphone': 4500 }

print(d)

# Obtendo os valores minimos
# usando a funcao zip para inverter o par chave/valor do dicionario
# zip trabalha com par chave/valor (tupla)

min_preco = min(zip(d.values(), d.keys()))

print(min_preco)

#x = np.linspace(0, 2 * np.pi, 100)
#
#plt.plot(x, np.sin(x))
#plt.show()

 

Anúncios

Escrito por zrhans

Professor at UFSM

3 Comments

  1. Para obter a chave do menor valor de um dicionário, outra forma, talvez mais eficiente, é a seguinte:

    min_preco = min(d, key=d.get)

    ( vale também para max() )

    Curtido por 1 pessoa

    Responder

    1. correto, mas nesse caso será retornado apenas o valor da chave, enquanto o modelo que apresentei antes é para acessar o valor da chave e conteúdo correspondente àquela chave como uma tupla. No exemplo que você mostra, se eu quisesse o conteúdo da chave do menor valor ainda teria que usar d[min_preco]. E por fim para a tupla criat um novo objeto a associar ambos resultados:

      min_preco = min(d, key=d.get)
      t = (d[min_preco], min_preco)
      print(t)
      
      #Resultado: (3000, 'notebook')
      

      Curtir

      Responder

      1. Tu tens razão.
        De fato eu havia ignorado esse ponto e a sugestão não retorna o valor esperado, conforme a postagem original.

        De toda a forma, a correção que vc ofereceu para a sugestão ainda é mais eficiente que a função zip em caso de listas muito grandes. Em listas pequenas a diferença é irrelevante e fica a gosto do programador. 😉

        Veja, por exemplo, o “benchmark de pobre” abaixo (python3).

        São três formas diferentes de se obter o mesmo resultado. No pc que uso aqui, o tempo de execução (s) ficou em:

        f1: 0.8307011289980437
        f2: 0.8217778760008514
        f3: 1.0640241279979819

        def f1():
        	min_preco = min(zip(d.values(), d.keys()))
        	print("min:", min_preco)
        
        def f2():
        	min_preco = min(d, key=d.get)
        	min_preco = d[min_preco], min_preco
        	print("min:", min_preco)
        
        def f3():
        	min_preco = min(d.values()), min(d, key=d.get)
        	print("min:", min_preco)
        
        if __name__ == '__main__':
        	k = list(range(0, 1000000))
        	v = list(range(1000000, 0, -1))
        	d = dict(zip(k, v))
        
        	from timeit import Timer
        	print("f1:", Timer(f1).timeit(10))
        	print("f2:", Timer(f2).timeit(10))
        	print("f3:", Timer(f3).timeit(10))
        
        

        Curtido por 1 pessoa

Deixe um comentário

Faça o login usando um destes métodos para comentar:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s