• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

JoaoRodrigues

Dicionário - Duvida

9 mensagens neste tópico

Tendo eu um dicionário com keys e values, como é que chamo a key do value X?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

hum.... ok.. é que num sítio do programa preciso de verificar se o value é válido e noutro se a key do value X existe...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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 ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

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