#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 может иногда пригодиться в подобных проблемах.