Добавление диктонары в диктонарку с использованием цикла for - PullRequest
0 голосов
/ 28 мая 2019

Ниже приведены списки:

text = ['is', 'ramping', 'brings']
head = ['ramping', 'ramping', 'ramping']
childWord = [[],
 ['Cola', 'is', 'up', 'launches', 'brings', 'drink', '.'],
 ['as', 'it', 'mineral']]

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

verb = {}
for i in range(0 , len(text)):

    verb [i] = {'Verb Text': text[i], 'Text Head of the verb' : head[i], 'Child Word of the verb' : childWord[i]}

verb.update(verb [i])
verb

И я получаю вывод следующим образом:

{0: {'Verb Text': 'is',
  'Text Head of the verb': 'ramping',
  'Child Word of the verb': []},
 1: {'Verb Text': 'ramping',
  'Text Head of the verb': 'ramping',
  'Child Word of the verb': ['Cola',
   'is',
   'up',
   'launches',
   'brings',
   'drink',
   '.']},
 2: {'Verb Text': 'brings',
  'Text Head of the verb': 'ramping',
  'Child Word of the verb': ['as', 'it', 'mineral']},
 'Verb Text': 'brings',
 'Text Head of the verb': 'ramping',
 'Child Word of the verb': ['as', 'it', 'mineral']}

На выходе проблема заключается в том, что он создает пару ниже значения ключа два раза

'Verb Text': 'brings',
 'Text Head of the verb': 'ramping',
 'Child Word of the verb': ['as', 'it', 'mineral']

Любые комментарии приветствуются .. !!

Ответы [ 2 ]

0 голосов
/ 28 мая 2019

Вы обновляете словарь в конце вне цикла, и это вызвало дублирование последнего значения. Удалить dict.update внешний цикл:

verb = {}
for i in range(0 , len(text)):
    verb[i] = {'Verb Text': text[i], 'Text Head of the verb' : head[i], 'Child Word of the verb' : childWord[i]}

#verb.update(verb [i])  <- Remove this line

print(verb)

Лучше было бы использовать встроенные zip и enumerate, например:

verb = {} 
for i, (x, y, z) in enumerate(zip(text, head, childWord)):
    verb[i] =  {'Verb Text': x, 'Text Head of the verb': y, 'Child Word of the verb': z}

print(verb)

который снова использует словарь-понимание:

verb = {i: {'Verb Text': x, 'Text Head of the verb': y, 'Child Word of the verb': z} for i, (x, y, z) in enumerate(zip(text, head, childWord))}
0 голосов
/ 28 мая 2019

Строка verb.update(verb[i]) обновляет словарь с последним элементом после цикла for, следовательно, последний элемент появляется дважды.

Удалите эту строку, и ваш код будет работать нормально

Следовательно, код изменится на

text = ['is', 'ramping', 'brings']
head = ['ramping', 'ramping', 'ramping']
childWord = [[],
 ['Cola', 'is', 'up', 'launches', 'brings', 'drink', '.'],
 ['as', 'it', 'mineral']]

verb = {}
for i in range(0 , len(text)):

    verb [i] = {'Verb Text': text[i], 'Text Head of the verb' : head[i], 'Child Word of the verb' : childWord[i]}

#Remove this line since it is updating the dictionary with the last element again
#verb.update(verb [i])

print(verb)

Вы также можете упростить код, реструктурировав свой словарь, а затем воспользовавшись списком.рассчитать ваш окончательный список

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...