Как поместить 2 списка в 1 словарь в Python?

1

Итак, это ситуация: у меня есть 2 списка и вы хотите поместить их в словарь.

Контент ['Это содержимое Sams', 'Это кто-то другой контент']
Автор ['Sam', 'Someone Else']

Это словарь, который я хотел бы создать

Обзоры [{'content': 'Это содержимое Sams', 'author': 'Sam'}, {'content': 'Это кто-то другой контент', 'author': 'Someone Else'}

Надеюсь, ты поймешь, в чем вопрос. Спасибо за помощь.

Теги:

4 ответа

7
Лучший ответ

Вы ищете zip, я верю. Что-то вроде этого:

reviews = [{'content': c, 'author': a} for c, a in zip(contentList, authorList)]
  • 0
    Приятно! Я не видел zip () раньше. :)
  • 0
    Это важно Это помогает в такой ситуации без конца.
Показать ещё 3 комментария
0

Предполагая, что контент и автор являются массивами, как определено в вопросе, и предполагая, что вы хотите получить один результирующий dict:

d = {}

for i in range(len(Content)):
   d[Content[i]] = Author[i]
  • 1
    for i in range(len(x)) в питоне не разрешено, если только вы не манипулируете только индексами. -1
  • 0
    @delnan: можете ли вы предоставить некоторую документацию для поддержки этого? Я предполагаю , что вы говорите о том, что не являясь вещий, это хорошо, но это действительно работает :)
Показать ещё 5 комментариев
0
content = ['This is Sams Content', 'This is someone\ else content'] 
author = ['Sam', 'Someone Else']

reviews = []

for i in range(len(author)):
    d = {
        'content': content[i],
        'author': author[i]
    }
    reviews.append(d)

for r in reviews:
    print "Author: %s, content: %s" % (r['author'], r['content'])

EDIT для тех, кто жаловался, что range(len(...)) недостаточно Pythonic (к которому я говорю просто "серьезно?" ), здесь же решение с использованием enumerate(), как было предложено:

content = ['This is Sams Content', 'This is someone\ else content'] 
author = ['Sam', 'Someone Else']

reviews = []

for i, elem in enumerate(author):
    d = {
        'content': content[i],
        'author': elem,
    }
    reviews.append(d)

for r in reviews:
    print "Author: %s, content: %s" % (r['author'], r['content'])

Лично я предпочитаю решение range(len(...)) по сравнению с enumerate, потому что доступ к обоим массивам в том же стиле при создании хэша помогает читаемости. zip по-прежнему остается самым изящным решением.

  • 0
    Спасибо, действительно четкий ответ. Должен был быть в состоянии выяснить это с помощью документации, но мне всегда было немного трудно читать документацию по Python. Кажется, это не так хорошо структурировано.
  • 0
    Рад, что помог Сэм! Документы легче читать, чем больше вы их читаете и чем больше Python вы пишете, так что следите за этим! :)
Показать ещё 2 комментария
0
reviews = []
authors = ['sam', 'dave']
content = ['content by sam', 'content by dave']
for a, c in zip(authors, content):
    reviews.append({'content':c, 'author':a})
print reviews
  • 0
    GDDC ответ является более кратким и питоническим

Ещё вопросы

Сообщество Overcoder
Наверх
Меню