Если у меня есть список вещей, как мне связать элемент с этими вещами? Python

#python

#python

Вопрос:

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

 ['i', 'am', 'a', 'brown', 'cow']
  

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

 [['i', ['term']], ['am', ['term']], ['a', ['term']], ['brown', ['term']], ['cow', ['term']]]
  

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

Комментарии:

1. На самом деле самый простой способ — это цикл for, добавляющий вещи в список. Почему у вас это не сработало?

Ответ №1:

Если вы новичок в Python, наиболее очевидным вариантом, вероятно, будет простой циклический подход:

 d = {}
lst = ['i', 'am', 'a', 'brown', 'cow']
for key in lst:
  d[key] = 'term'
  

После этого вы можете получить доступ к своим элементам следующим образом:

 In:  print d['am']
Out: 'term'
  

Конечно, это не лучший способ сделать это. Как уже говорили другие, вам следует взглянуть на понимание списка и встроенную zip() функцию. Я попытаюсь написать несколько примеров кода, используя понимание списка и zip() функции, но по-прежнему настоятельно рекомендуется ознакомиться с официальной документацией.

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

 lst = ['i', 'am', 'a', 'brown', 'cow']
res = [[item, ['term']] for item in lst]
  

Это даст вам точно то же самое, что вы написали в своем вопросе. В случае, если вы хотите получить dict (как в нашем первом примере), вы можете немного изменить этот код:

 lst = ['i', 'am', 'a', 'brown', 'cow']
res = [(item, 'term') for item in lst]
d = dict(res)
  

И снова у вас есть:

 In : print d['am']
Out: 'term'
  

Теперь вы, вероятно, захотите назначить разные термины разным элементам вашего списка.
Допустим, у вас есть два списка одинаковой длины, один с элементами, другой с терминами:

 lst = ['i', 'am', 'a', 'brown', 'cow']
terms = ['term1', 'term2', 'term3', 'term4', 'term5']
  

Вот где zip() функция помогает. Если вы передадите его lst и terms в качестве аргументов, он выдаст вам список кортежей (точно так же, как в нашей res переменной несколькими строками ранее):

 In : zip(lst, terms)
Out: [('i', 'term1'), ('am', 'term2'), ('a', 'term3'), ('brown', 'term4'), ('cow', 'term5')]
  

И теперь вы можете снова использовать dict для создания нового словаря:

 what_i_need = dict(zip(lst, terms))
  

Комментарии:

1. Ооо, большое спасибо за помощь! Я не знал, что вы можете назначать подобные термины в циклах for. Спасибо!

2. Я рад вам помочь 🙂 Если вы считаете мой ответ полезным, вы можете проголосовать за или / и принять его 😉

3. По какой-то причине я получаю возвращаемое значение none, когда пытаюсь это сделать: old_ial = ial.append([[токен, [изображение]] для токена в words_separated]) Когда я просматриваю отладчик, он показывает, что элементы добавляются в ial, но затем сразу после добавления последнего элемента я получаю возвращаемое значение None. Что именно я делаю не так?

4. Во-первых, ial.append(smth) будет добавляться smth как элемент ial , а не объединять два списка. Во-вторых, ial.append(smth) изменяет ial и возвращает None всегда. .append() метод не предназначен для возврата некоторого значения, он изменяет своего владельца. Если вы хотите создать новый список как объединение двух других, вы можете просто использовать такой знак: new_list = [1,2,3] [4,5,6]

5. @JasonD, append изменяет ial , но всегда возвращает None

Ответ №2:

Взгляните на функцию pythons zip().

Также понимание списка Python может иногда пригодиться в подобных проблемах.