Como recuperar valores de dicionário em Python?
-
13-12-2019 - |
Pergunta
Tenho um dicionário de métodos em Python que está dentro de uma definição.Esse def
é chamado fora da classe usando um objeto.Sempre que o def
é chamado, são retornados os resultados do último item do dicionário.Neste caso, recebo os resultados de def spc_summary:
.
def setStyles(self):
# Assign function to file
functions = {
'app_server.php':self.app_server(),
'dcrm2nlyte.php':self.dcrm2nlyte(),
'export.php':self.export(),
'host_server.php':self.host_server(),
'spc.php':self.spc(),
'spc_approved.php':self.spc_approved(),
'spc_approved_by_dc.php':self.spc_approved_by_dc(),
'spc_by_dc.php':self.spc_by_dc(),
'spc_complete.php':self.spc_complete(),
'spc_summary.php':self.spc_summary()
}
filename = self.phpfile
functions.get(filename)
Alguém pode explicar o que está acontecendo aqui?Deixe-me saber se mais detalhes são necessários.Obrigado!
Deixe-me adicionar alguns detalhes:O functions.get(filename)
está recuperando o último item do dicionário, independentemente do nome do arquivo.Eu fiz isso => functions('spc.php')
e ainda retornou resultados para `def spc_summary'.E essas definições não deveriam ter os mesmos resultados.
Solução
Sua função dict parece estar fazendo a coisa errada.Ao definir seu dict, você está mapeando as chaves para o resultado da função em vez do objeto de função.Se você mapeá-lo para o objeto de função, a função será chamada quando você invocar functions.get(filename)()
Seu ditado provavelmente deveria ser como abaixo:
functions = {
'app_server.php':self.app_server,
'dcrm2nlyte.php':self.dcrm2nlyte,
'export.php':self.export,
'host_server.php':self.host_server,
'spc.php':self.spc,
'spc_approved.php':self.spc_approved,
'spc_approved_by_dc.php':self.spc_approved_by_dc,
'spc_by_dc.php':self.spc_by_dc,
'spc_complete.php':self.spc_complete,
'spc_summary.php':self.spc_summary
}
Outras dicas
Os dicionários não são ordenados, portanto, o último objeto retornado da iteração sobre um dict provavelmente não será o último item inserido nesse dict.
functions.get(filename)
vai pegar o valor atual de filename
e procure em functions
. filename
obtém seu valor de self.phpfile
, então no seu exemplo self.phpfile
deve ser definido como 'spc_summary.php'.