Я использую Django 3x. У меня есть одна таблица под названием Book. Когда я пишу для этого запрос, я получаю такие данные:

book_details = Book.objects.all().values()
print(book_details)

<QuerySet [{'id': 1, 'author': 'ABC', 'price': 150, 'category': 'Comic', 'available': 1}, {'id': 2, 'author': 'XYZ', 'price': 500, 'category': 'Historical Fiction', 'available': 1}, {'id': 3, 'author': 'MNO', 'price': 200, 'category': 'Horror', 'available': 0}]>

Я пытаюсь создать данные в этом формате ниже

{'id':[1,2,3], 'author':['ABC', 'XYZ', 'MNO'], 'price':[150,500,200], 'category':['Comic', 'Historical Fiction', 'Horror'], 'available':[1,1,0]}

Как создать данные в этом формате.

Посоветуйте, пожалуйста, как лучше это сделать. Будем очень признательны за объяснение. Спасибо!.

1
kumar 24 Ноя 2021 в 12:58

1 ответ

Лучший ответ

Если вы это сделаете:

lst_of_dicts = list(book_details)

Вы получите следующее, поэтому если вы напечатаете lst_of_dicts , это будет выглядеть так:

[{'id': 1, 'author': 'ABC', 'price': 150, 'category': 'Comic', 'available': 1},
{'id': 2, 'author': 'XYZ', 'price': 500, 'category': 'Historical Fiction', 'available': 1}, 
{'id': 3, 'author': 'MNO', 'price': 200, 'category': 'Horror', 'available': 0}]

Итак, это список словарей, а вам нужен диктатор списков, поэтому вам нужно сделать следующий шаг, и он следующий:

from itertools import chain   # Necessary import

keys = set(chain(*[dic.keys() for dic in lst_of_dicts ]))
final_dict = {key : [dic[key] for dic in lst_of_dicts if key in dic] for key in keys }

final_dict будет выглядеть так:

{'id': [1, 2, 3], 'author': ['ABC', 'XYZ', 'MNO'], 'available': [1, 1, 0], 'price': [150, 500, 200], 'category': ['Comic', 'Historical Fiction', 'Horror']}
1
Tajinder Singh 24 Ноя 2021 в 14:01