@Sergey_Lomakin

Почему все словари с списки пустые, кроме первого?

Нужно записать в файл user_id; категория, 1, но правильно записывается только 1ый пользователь

import csv


def writer(user_id):
    user_cart = []
    user_order = []
    user_cart_quantity = {}  # {user_cart: user_order}
    for row in reader:
        if row['user_id'] == str(user_id):
            # список со всеми категориями с повтором
            user_cart.append(row['cart'])
            # список уникальных дат заказов
            if row['order_completed_at'] not in user_order:
                user_order.append(row['order_completed_at'])

    # получение словаря key - категория, value - количество заказов
    for i in user_cart:
        if i not in user_cart_quantity:
            if user_cart.count(i) > len(user_order) / 2: # заказов > 50%
                user_cart_quantity.update({f'{i}': user_cart.count(i)})

                with open('data/tesr.txt', 'a') as fw:
                    fw.write(f'{user_id};{i}, 1\n')

    print(user_id)
    print(user_order)
    print(len(user_order))
    print(user_cart_quantity)


with open('data/train.csv') as f:
    reader = csv.DictReader(f)
    user_id = 2
    while user_id < 20000:
        writer(user_id)
        user_id += 1
  • Вопрос задан
  • 54 просмотра
Решения вопроса 1
solotony
@solotony
покоряю пик Балмера
в каждом цикле сбрасывай указатель файла на начало f.seek(0)

p.s. то что у тебя написано - кошмар полный . можно оптимизировать сделав только 1 проход по файлу
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
Вы используете глобальный объект reader. После первого пользователя reader дошёл до конца файла, и больше ему читать нечего.

Измените код так, чтобы у каждого пользователя был свой словарь, и раскладывайте данные по ним. Например, сделайте словарь верхнего уровня, где ключ - id_пользователя.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы