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

JoaoRodrigues

Dicionário - Duvida

Mensagens Recomendadas

magician    2
magician

Os dicionários como o próprio nome indica das-se uma key e ele retorna a valor correspondente a essa key e não ao contrario.

Nesse caso terias de percorrer todo o dicionário para ver todos os valores, a menos que python tenha alguma implementação diferente do normal dos dicionarios e hashtables. Tens sempre a hipótese de fazer um duplo com key->valor e valor->key mas não acho que seja a melhor opção.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Betovsky    2
Betovsky

Para além que pode haver mais do que uma chave para um determinado valor. Já que o valor não tem de ser obrigatoriamente único, ao invés da chave.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
JoaoRodrigues    0
JoaoRodrigues

Já dei a volta ao problema, troquei as chaves com os valores e como uns deles são simples números a começar em 1...

print 'Em qual das bases de dados deseja procurar?'

databases = {1: 'PubMed', 2: 'Nucleotide', 3: 'Protein',4:'Genome',5:'Structure'}

choice = raw_input('[1] PubMed\n[2] Nucleotide\n[3] Protein\n[4] Genome\n[5] Structure\n..:')

if int(choice) not in databases.keys():
    print 'Escolha Inválida'
    sys.exit()

search_database = databases[int(choice)]

Thanks pela ajuda! Sempre a aprender ;)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
djthyrax    11
djthyrax

Para procurares a key de um certo value:

def searchKey(value, dicionario):
    for i in dicionario: if dicionario[i] == value: return i
    return false

Não testado.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pcaldeira    0
pcaldeira

Também é bem pensado sim senhora... e funciona. Só não percebi porque tens o return false ali...

O return false é para fazer a função retornar false caso não encontre o valor em nenhuma key. Ainda assim, a tua solução (anaryin) é muito mais rápida. Com um dicionário pequeno não faz qualquer diferença, mas com BDs grandes a tua é muito mais eficiente, porque a do djthyrax percorre em média metade do dicionário, enquanto a tua não depende do tamanho do dicionário, o tempo de acesso é constante.

Ah, não tinha reparado naquele

if int(choice) not in databases.keys(): 

Isto faz com que tenhas de percorrer o dicionário todo. Faz antes só o

search_database = databases[int(choice)] 

entre um bloco try ... except KeyError.

Partilhar esta mensagem


Link 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