Создание диктата - PullRequest
0 голосов
/ 22 мая 2018

У меня есть несколько словарей, содержащих сведения о книгах, где каждая запись соответствует отдельной книге.

books = [1,2]
titles = {1 : 'sum_title', 2: 'other_title'}
authors = {1 : 'sum_author', 2 : 'other_author'}
length = {1 : 100, 2 : 200}
chapters = { 1 : 10, 2: 20}

Я хотел бы перебрать все книги и объединить словари в один текст дляпревращается в .json.Вот что у меня есть:

for book in (books):
    All_data.append({"authors": authors[book], "title": titles[book], "length": length[book]})

Однако это возвращает KeyError.

Причина, по которой я сначала поместил данные в несколько словарей, была в том, что я мог печатать и манипулировать ими отдельно,Например;напечатать всех авторов, но не названия.Это способ, которым я могу объединить словари в другой словарь и напечатать значение ключа, например, напечатать автора книги 1?

Большое спасибо за помощь.Пусть ваш код будет красивым и без ошибок.

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Функциональный подход может оказаться более адаптивным.Это не обязательно более эффективно, чем явное написание ключей в вашем словаре, но его легче расширить:

from operator import itemgetter

keys = ['titles', 'authors', 'length', 'chapters']
values = [titles, authors, length, chapters]

res = [{i: itemgetter(book)(j) for i, j in zip(keys, values)} for book in books]

[{'authors': 'sum_author',
  'chapters': 10,
  'length': 100,
  'titles': 'sum_title'},
 {'authors': 'other_author',
  'chapters': 20,
  'length': 200,
  'titles': 'other_title'}]
0 голосов
/ 22 мая 2018

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

data = [{'author': authors[b], 'title': titles[b], 'length': length[b]} for b in books]

>>> [{'author': 'sum_author', 'title': 'sum_title', 'length': 100}, {'author': 'other_author', 'title': 'other_title', 'length': 200}]

Или понимание слова "dict of dicts":

data = {b: {'author': authors[b], 'title': titles[b], 'length': length[b]} for b in books}

>>> {1: {'author': 'sum_author', 'title': 'sum_title', 'length': 100}, 2: {'author': 'other_author', 'title': 'other_title', 'length': 200}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...