@sergey_frolkin

Как сделать правильный цикл назначения одной сущности другой?

Коллеги, добрый день!
Обращаюсь за помощью
Не могу разобраться в цикле
import itertools
import json
from HW4 import JSON_FILE_PATH, CSV_FILE_PATH, RESULT_JSON_FILE_PATH
from csv import DictReader


with (open(CSV_FILE_PATH, "r") as books,
      open(JSON_FILE_PATH, "r") as f,
      open(RESULT_JSON_FILE_PATH, "w") as result_json):
    books = DictReader(books)

    users = [
        {
            "name": user["name"],
            "gender": user["gender"],
            "address": user["address"],
            "age": user["age"],
            "books": [],
        }
        for user in json.load(f)
    ]

    for book, user in zip(books, itertools.cycle(users)):
        user["books"].append(
            {
                "title": book["Title"],
                "author": book["Author"],
                "pages": book["Pages"],
                "genre": book["Genre"],
            }
        )
        json.dump(users, result_json, indent=4)

Суть такова, что из файла JSON_FILE_PATH берутся юзеры, точнее необходимые параметры из готового списка (юзеров в изначальном и итоговом списке одинаковое количество)
А из файла CSV_FILE_PATH берутся книги, которые должны распределяться по порядку на всех пользователей в равном количестве (книг такое количество, что кому-то достанется больше, при последнем проходе цикла).
В питон только пытаюсь, головоломку решить не могу, уже кучу уроков про циклы просмотрел, а все никак не получается добиться нужного результата.
Благодарю!
  • Вопрос задан
  • 90 просмотров
Решения вопроса 1
@o5a
Проблема в том, что строка с выгрузкой результата в файл, находится внутри цикла, поэтому в файл будут попадать данные каждой итерации цикла. Предполагалось видимо выгрузить только в конце, поэтому отступ изменить надо
for book, user in zip(books, itertools.cycle(users)):
    user["books"].append(
        {
            "title": book["Title"],
            "author": book["Author"],
            "pages": book["Pages"],
            "genre": book["Genre"],
        }
    )
json.dump(users, result_json, indent=4)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы