Есть ли способ получить выходные данные функции, которая переводит строку в том же порядке, что и входные данные? - PullRequest
0 голосов
/ 24 апреля 2019

Извините, если название было запутанным. Упражнение, над которым я работаю, состоит в том, чтобы написать функцию, которая принимает два аргумента: словарь, который отображает шведские слова на английский, и строку, соответствующую шведскому предложению. Функция должна возвращать перевод предложения на английский

Моя функция хорошо работает с переводом, но выводится в неправильном порядке.

Например, следующий аргумент, состоящий из словаря и строки на шведском языке (англ .: «Хорошая обезьяна»)

translate_sentence({'en': 'a', 'fin': 'fine', 'apa': 'monkey'}, 'en fin apa')  

должен вернуть

'a fine monkey'

но вместо этого он возвращает

'a monkey fine'

Вот скрипт для функции:


def translate_sentence(d, sentence): 
    result = []                     
    delimiter = ' '                 
    s = sentence.split()            
    for word in d:                        
        if word in sentence and word in d:
            d_word = (d[word])
            result.append(d_word)
    for word in s:                          
        if word in s and word not in d:
            s_word = word
            result.append(s_word)
    return delimiter.join(result)    

Как я уже говорил, проблема в том, что функция возвращает переведенную строку со словами в неправильном порядке. Я знаю, что словари python не упорядочены, есть ли способ получить вывод в том же порядке, что и предложение?

Ответы [ 2 ]

1 голос
/ 24 апреля 2019

Мы проверяем значение для каждого ключа, где ключ - это слово в строке, и если мы его не найдем, мы используем исходное слово

def translate_sent(d, s): 
    return ' '.join(d[word] if word in d else word for word in s.split())

>>> translate_sent({'en': 'a', 'fin': 'fine', 'apa': 'monkey'},        'en fin apa')  
'a fine monkey'
>>> translate_sent({'en': 'a', 'fin': 'fine'}, 'en fin apa')  
‘a fine apa’
1 голос
/ 24 апреля 2019

Этот однострочный, кажется, работает нормально.Найдите каждое слово в словаре и объедините в том же порядке, что и входное предложение.

def translate_sentence(d, sentence): 
    return ' '.join(d.get(word, word) for word in sentence.split())

Пример:

>>> translate_sentence({'en': 'a', 'fin': 'fine', 'apa': 'monkey'}, 'en fin apa')  
'a fine monkey'
>>> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...