How can I use two methods in one line in python?

Asked

Viewed 911 times

2

How could I order the methods of the last two lines of code with grandchildren, so that it works in this code:

# É criada a hash 'pontuações' a qual ira armazenar e ao mesmo tempo linkar os nomes as pontuações
pontuações = { }
arquivo = open("results.txt")
for linha in arquivo:
    (nome, pontuação) = linha.split()
    # A variável pontuações com a chave tendo como valor as variáveis do array 'pontuação' e tem como valor as variáveis do array 'nome'
    pontuações[pontuação] = nome
print("As pontuações mais altas são : ")
# Pode ser traduzido essa linha de código como 'para cada_pontuação(nova variável criada) em pontuações'retornar um array com as chaves do hash' '
for cada_pontuação in pontuações.keys():
    # Mostra os valores(os nomes neste caso) assosciados as chaves de 'pontuações' juntamente com 'pontuou' e mostra as chaves da variável 'cada_pontuação'
    print(pontuações[cada_pontuação] + '    pontuou ' + cada_pontuação)
'''
pontuações.keys(.sort(reverse = True))
print(pontuações)
'''

2 answers

2


It is not a matter of "using two methods on the same line" - it is just that "Sort" does not return any value: it sorts the list internally.

But Python also has built-in function sorted- it creates a new ordered list from a sequence, and returns this new sequence - so it can be used as a parameter for another function:

print(sorted(pontuações))

But never let "can’t do it on the same line" get in the way of your programming - it’s not about putting in fewer lines. In the case of Python, specifically, the question is "how to make the program more readable for those who come after I can continue".

In the case of sort exists sorted which allows you to put everything in one expression, but if there were no, there is no problem using multiple lines of code to express an operation.

-1

If the Keys of a dictionary are numbers (float or int), list(dict.keys()) returns an ordered list of them. Example:

d=dict({5.1:"asd", 2.3:"bbjs", 4.0:"sdad", 3.6:"dsf"})

list(d.keys())

Out[54]: [2.3, 3.6, 4.0, 5.1]

To get an ordered list in reverse order:

sorted(list(d.keys()), reverse=True)

Out[58]: [5.1, 4.0, 3.6, 2.3]

Adapting to your code:

# É criada a hash 'pontuações' a qual ira armazenar e ao mesmo tempo linkar os nomes as pontuações
pontuações = { }
arquivo = open("results.txt")
for linha in arquivo:
    (nome, pontuação) = linha.split()
    # A variável pontuações com a chave tendo como valor as variáveis do array 'pontuação' e tem como valor as variáveis do array 'nome'
    pontuações[float(pontuação)] = nome # provavelmente pontuação é uma string por ser parte de uma linha de texto, force-a a ser um float
print("As pontuações mais altas são : ")
# Pode ser traduzido essa linha de código como 'para cada_pontuação(nova variável criada) em pontuações'retornar um array com as chaves do hash' '
for cada_pontuação in pontuações.keys():
    # Mostra os valores(os nomes neste caso) assosciados as chaves de 'pontuações' juntamente com 'pontuou' e mostra as chaves da variável 'cada_pontuação'
    print(pontuações[cada_pontuação] + '    pontuou ' + cada_pontuação)

print( sorted(list(pontuações.keys()), reverse=True) )
  • 1

    "If the Keys of a dictionary are numbers (float or int), list(dict.keys()) returns an ordered list of them." That is false. It may have come sorted by luck in your example, but it’s not something python does, so you can’t count that as an invariant. If you try other examples you will notice that this does not happen. Also, from python 3.6 onwards .keys() returns keys in the same order they were inserted.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.