0

Дан список слов, английских, и нескольких переводов после. Каждое английское сделать ключем в словаре, а русское, т.е перевод перенести в значение ключа списком.

     TEXT5=['act up', 'барахлить', 'плохо работать', 'плохо себя вести', 'капризничать', 'болеть', 
       'мучить', 'оправдывать (ожидания)',
       'ask around', 'расспрашивать', 'искать', 'back away', 'отступаться', 'с',
       'back up', 'вызывать затор', 'скопление', 'создавать резеврную копию',
       'back off', 'отступать', 'возвращаться', 'сбрасывать скорость', 'be back', 'возвращаться']   
     Phrase_VerbDictFinal={'act up': [],
              'ask around': [], 'back away': [], 'back up': [], 'back off': [], 'be back': []}

Примерно такой цикл пришел в голову.

for i in TEXT5:
      for k in Phrase_VerbDictFinal:
          while i not in Phrase_VerbDictFinal.values():
              Phrase_VerbDictFinal.values().append(str(i))

и такую ошибку выдает 'builtin_function_or_method' object has no attribute 'append'

ручное изменение словаря и добавления перевода VerbDictmini2={ 'be up to': [], 'blow out': [], 'blow up': [], 'break in': [], 'break out': [] }

Translate=''
while r<len(VerbDictmini2):
    for i in VerbDictmini2.values():
        while Translate!='Next':
            Translate = input(str())
            if Translate=='Next' or Translate=='next' :
                print(VerbDictmini2)
                break
            i.append(str(Translate))
            File=open('Phrase_verbDictmini2.txt','w', encoding='utf-8')
            File.write(str(VerbDictmini2))
            print(VerbDictmini2)
            File.close()
print(VerbDictmini2)

  • гарантируется ли наличие в списке каждого англ. слова, содержащегося в словаре, и наоборот ? – n1tr0xs Aug 20 '22 at 04:37

2 Answers2

0

Можно так сделать:

TEXT5=[
    'act up', 'барахлить', 'плохо работать', 'плохо себя вести',
    'капризничать', 'болеть', 'мучить', 'оправдывать (ожидания)',
    'ask around', 'расспрашивать', 'искать', 'back away', 'отступаться', 'с',
    'back up', 'вызывать затор', 'скопление', 'создавать резеврную копию',
    'back off', 'отступать', 'возвращаться', 'сбрасывать скорость',
    'be back', 'возвращаться',
]

Phrase_VerbDictFinal={ 'act up': [], 'ask around': [], 'back away': [], 'back up': [], 'back off': [], 'be back': [] }

записываем индексы английских слова

indexes = sorted((TEXT5.index(word)) for word in Phrase_VerbDictFinal)

добавляем для обработки последнего слова

indexes.append(len(TEXT5))

for i, start in enumerate(indexes[:-1]): end = indexes[i+1] Phrase_VerbDictFinal[TEXT5[start]] = TEXT5[start+1:end] print(Phrase_VerbDictFinal) #{'act up': ['барахлить', 'плохо работать', 'плохо себя вести', 'капризничать', 'болеть', 'мучить', 'оправдывать (ожидания)'], 'ask around': ['расспрашивать', 'искать'], 'back away': ['отступаться', 'с'], 'back up': ['вызывать затор', 'скопление', 'создавать резеврную копию'], 'back off': ['отступать', 'возвращаться', 'сбрасывать скорость'], 'be back': ['возвращаться']}

Ну или можно воспользовать Dict Comprehensions:

# записываем индексы английских слова
indexes = sorted((TEXT5.index(word)) for word in Phrase_VerbDictFinal)
# добавляем для обработки последнего слова
indexes.append(len(TEXT5))

Phrase_VerbDictFinal = { TEXT5[indexes[i]]: TEXT5[indexes[i]+1:indexes[i+1]] for i in range(len(indexes)-1) }

n1tr0xs
  • 11,944
  • что почитать стоит, чтобы разобраться лучше в циклах? – Era_of__ enlightenment Aug 20 '22 at 06:23
  • @Era_of__enlightenment https://ru.stackoverflow.com/questions/420125/%D0%9A%D0%BD%D0%B8%D0%B3%D0%B8-%D0%B8-%D1%83%D1%87%D0%B5%D0%B1%D0%BD%D1%8B%D0%B5-%D1%80%D0%B5%D1%81%D1%83%D1%80%D1%81%D1%8B-%D0%BF%D0%BE-python – n1tr0xs Aug 20 '22 at 06:50
  • 1
    этот алгоритм не сработает если в TEXT5 будут глаголы которых изначально не было в Phrase_VerbDictFinal – SergFSM Aug 20 '22 at 08:16
0

можно из списка сделать словарь, чтобы отделить английские слова используем регулярку:

from re import fullmatch

TEXT5 = [ 'act up', 'барахлить', 'плохо работать', 'плохо себя вести', 'капризничать', 'болеть', 'мучить', 'оправдывать (ожидания)', 'add in', 'включать', # <-----------------------------------элемент добавлен 'ask around', 'расспрашивать', 'искать', 'back away', 'отступаться', 'с', 'back up', 'вызывать затор', 'скопление', 'создавать резеврную копию', 'back off', 'отступать', 'возвращаться', 'сбрасывать скорость', 'be back', 'возвращаться']

TEXT5_dict = {} for i in TEXT5: if fullmatch(r'[a-z ]+',i): key = i TEXT5_dict[key] = [] else: TEXT5_dict[key].append(i)

>>> TEXT5_dict ''' {'act up': ['барахлить', 'плохо работать', 'плохо себя вести', 'капризничать', 'болеть', 'мучить', 'оправдывать (ожидания)'], 'add in': ['включать'], 'ask around': ['расспрашивать', 'искать'], 'back away': ['отступаться', 'с'], 'back up': ['вызывать затор', 'скопление', 'создавать резеврную копию'], 'back off': ['отступать', 'возвращаться', 'сбрасывать скорость'], 'be back': ['возвращаться']}

ps: первым элементом в TEXT5 должно быть английское слово, иначе будет ошибка

SergFSM
  • 5,655
  • 1
  • 7
  • 17