Dictionary in python

2

Next, I have a table with words in a language, I will use example to suppose, from Portuguese to English. These words are in a dictionary where the key is the Portuguese word and the value is the English word. Using the dictionary keys in a string, forming a sentence, how would it be translated into English? In other words, how do I say a sentence and return it to me? * Let's consider that would be a sentence and not just a word ... I'm trying to move to a list to do the reading.

    
asked by anonymous 05.10.2017 / 09:25

3 answers

6

From what I realized I think you can do the following:

d = {'olá': 'hello', 'como':'how', 'estás':'are', 'tu':'you'}
frase = 'olá como estás tu' # aqui seria o teu input('frase')
words = frase.split() # dividir por espaços para obter uma lista com as palavras
print(' '.join(d[w] for w in words)) # hello how are you

DEMONSTRATION

A better-prepared version, with the ability to bypass possible KeyError errors:

d = {'olá': 'hello', 'como':'how', 'estás':'are', 'tu':'you'}
frase = 'olá como estás tu aí em cima' # aqui seria o teu input('frase')
words = frase.split() # dividir por espaços para obter uma lista com as palavras
print(' '.join(d[w] if w in d else w for w in words)) # hello how are you aí em cima

DEMONSTRATION

In this last version if the Portuguese word does not exist in the dictionary, it simply does not translate it.

For comments I realized that you might want whole phrases as keys, this is still less laborious:

d = {'olá como estás?':'Hello how you', 'grande almoço': 'nice lunch'}
hey = 'olá como estás?'
print(d[hey]) # Hello how you
hey = 'grande almoço'
print(d[hey]) # nice lunch
hey = 'hey hey hey'
if hey not in d: # não exiSta no dic
  print(hey) # hey hey hey

DEMONSTRATION

    
05.10.2017 / 11:33
0

You can do this:

dicionario = {
  'good morning': 'bom dia',
  'good night': 'boa noite',
  'Hello': 'Ola',
  'good': 'bom',
  'day': 'dia',
  'this': 'isso',
  'will': 'vai',
  'translate': 'traduzir',
  'word': 'palavra',
  'for': 'por'
}

def traduz(frase, dicionario):
    saida = []
    # Verifica se o dicionario contem a frase
    if dicionario.get(frase):
      traducao = dicionario.get(frase)
      saida.append(traducao if traducao else frase)
    else: # Caso nao tem, divida a frase em uma lista de palavras
      frase = frase.split()
      # Iterar as palavras de entrada e acrescentar tradução
      for palavra in frase:
          traducao = dicionario.get(palavra)
          saida.append(traducao if traducao else palavra)

      # Retorna saida
    return ' '.join(saida)

To use, call the

# Traduz a frase informada pelo usuario.
print(traduz(input('Digite uma frase: '), dicionario))
# Traduz a frase pre-definida.
print(traduz('good night', dicionario))
# Traduz palavra por palavra
print(traduz('isso vai traduzir palavra por palavra', dicionario))
  

This response was based on this response in SOen.

     

See working at repl.it

    
05.10.2017 / 10:08
0

A little late, I'd like to add the functionality of searching for ready expressions like 'good morning' -> 'good morning', differentiating 'Good Trip' -> 'good trip' by word.

Basically we have this dictionary:

dicionario = {
        'bom':'good',
        'boa':'good',
        'dia':'day',
        'bom dia':'good morning',
        'acordou':'wake up',
        'viagem':'trip',
        'filme':'movie',
        'apertem os cintos... o piloto sumiu':'Airplane',
        'assisti':'watched',
        'eu':'I',
        'nunca':'never',
        'o':'the'
}

Notice that you even have the name of a movie.

First we do a function that checks if a string or word is found in the dictionary:

def existe_traducao(dicionario, lista):
    sequencia = ' '.join(x.lower() for x in lista)
    if sequencia in dicionario:
        return dicionario[sequencia]
    return ''

>>> print(existe_traducao(dicionario, ['Boa']))
good
>>> print(existe_traducao(dicionario, ['boa', 'viagem']))

>>> print(existe_traducao(dicionario, ['bom', 'dia']))
good morning

Now we just need to translate the phrase for expressions. To do this, we go from the current word to the end, after the current word to the end -1 and so on looking for a key in the dictionary:

def traduz(dicionario, frase):
    palavras = frase.split()
    lista_traduzida = []
    i = 0
    while i < len(palavras):
        for j in range(len(palavras), i, -1):
            traducao = existe_traducao(dicionario, palavras[i:j])
            if traducao != '': #Se achei tradução
                lista_traduzida.append(traducao)
                i = j
                break
        else:
            lista_traduzida.append(palavras[i].lower())
            i+=1
    return ' '.join(lista_traduzida)

>>> frase = 'Bom dia AlexCiuffa' #AlexCiuffa não está no dicionário
>>> print(traduz(dicionario, frase))
good morning AlexCiuffa
>>> frase = 'Boa viagem amigo' #amigo não está no dicionário
>>> print(traduz(dicionario, frase))
good trip amigo
>>> frase = 'Eu nunca assisti o filme Apertem os cintos... O piloto sumiu'
>>> print(traduz(dicionario, frase)) #perceba que a frase possui um titulo de filme
I never watched the movie Airplane
    
15.08.2018 / 05:38