Чтобы ускорить поиск слов и добиться хорошей гибкости, я бы выбрал словарь субдизайнеров: каждый подзадач переводит слова языка на все доступные языки, а словарь верхнего уровня отображает каждый язык в соответствующий subdictionary.
Например, если multidict
это словарь верхнего уровня, а затем возвращает multidict['english']['ball']
(суб) словарь:
{'english':'ball', 'francais':'ballon', 'svenska':'ball'}
Ниже приведен класс Multidictionary реализации такой идеи. Для удобства он предполагает, что все переводы сохраняются в текстовый файл в формате CSV, который считывается во время инициализации, например.:
english,svenska,francais,italiano
school,skola,ecole,scuola
ball,boll,ballon,palla
В CSV-файл можно легко добавить любое количество языков.
class Multidictionary(object):
def __init__(self, fname=None):
'''Init a multidicionary from a CSV file.
The file describes a word per line, separating all the available
translations with a comma.
First file line must list the corresponding languages.
For example:
english,svenska,francais,italiano
school,skola,ecole,scuola
ball,boll,ballon,palla
'''
self.fname = fname
self.multidictionary = {}
if fname is not None:
import csv
with open(fname) as csvfile:
reader = csv.DictReader(csvfile)
for translations in reader:
for lang, word in translations.iteritems():
self.multidictionary.setdefault(lang, {})[word] = translations
def get_available_languages(self):
'''Return the list of available languages.'''
return sorted(self.multidictionary)
def translate(self, word, language):
'''Return a dictionary containing the translations of a word (in a
specified language) into all the available languages.
'''
if language in self.get_available_languages():
translations = self.multidictionary[language].get(word)
else:
print 'Invalid language %r selected' % language
translations = None
return translations
def get_translations(self, word, language):
'''Generate the string containing the translations of a word in a
language into all the other available languages.
'''
translations = self.translate(word, language)
if translations:
other_langs = (lang for lang in translations if lang != language)
lang_trans = ('%s in %s' % (translations[lang], lang) for lang in other_langs)
s = '%s: %s' % (word, ', '.join(lang_trans))
else:
print '%s word %r not found' % (language, word)
s = None
return s
if __name__ == '__main__':
multidict = Multidictionary('multidictionary.csv')
print 'Available languages:', ', '.join(multidict.get_available_languages())
language = raw_input('Choose the input language: ')
word = raw_input('Type a word: ')
translations = multidict.get_translations(word, language)
if translations:
print translations
Что вы подразумеваете под значением1 и значением2? – Kasramvd
value1 = первое значение в словаре (в данном случае Skola или Boll) и value2 = второе значение в словаре (Ecole, Ballon) – Lovisa
Просто вы можете перебирать словарные слова: '>>> se_eng_fr_dict = {'School ': [' Skola ',' Ecole '],' Ball ': [' Boll ',' Ballon ']} >>> val =' Skola ' >>> для i, j в файле se_eng_fr_dict.items(): ... если J [0] == Вал: ... печать я ... печать J ... Школа [ 'Скол', 'Ecole'] ' – Kasramvd