Функция zip() объединяет 2 массива не полностью

Есть список с цифрами(values):

list_b = ['2021-09-14', '0', '0', '0', '0', '0', '212', '212', '5.0', '100.0%', 
'2021-09-13', '0', '0', '0', '0', '0', '159', '159', '5.0', '100.0%',
'2021-09-11', '0', '0', '0', '0', '0', '145', '145', '5.0', '100.0%', 
'2021-09-10', '0', '0', '0', '0', '0', '196', '196', '5.0', '100.0%', 
'2021-09-09', '0', '0', '0', '6', '0', '111', '117', '4.9', '94.87%', 
'2021-09-08', '0', '0', '0', '0', '0', '103', '103', '5.0', '100.0%', 
'2021-09-07', '0', '0', '0', '0', '0', '201', '201', '5.0', '100.0%',
'2021-09-06', '3', '0', '0', '0', '0', '135', '135', '5.0', '100.0%', 
'2021-09-04', '0', '0', '0', '0', '0', '95', '95', '5.0', '100.0%', 
'2021-09-03', '0', '0', '0', '0', '0', '127', '127', '5.0', '100.0%']

И список с названиями(keys):

list_a = ["Дата: ", "с ошибкой: ", "с оценкой 1: ", "с оценкой 2: ", "с оценкой 3: ", 
"с оценкой 4: ", "с оценкой 5: ", "Всего: ", "Среднее: ", "Процент удовлетворенности: "]

Хочу это оформить в виде словаря и потом записать в .csv файл в таком виде: Таблица .csv

Запускаю код:

for keys, values in zip(list_a, list_b):
    print(keys, values)

Но результат выполнения программы - только первый элемент из списка b:

введите сюда описание изображения


Ответы (2 шт):

Автор решения: strawdog

Слишком много лишних движений, кроме того, вы поленились почитать документацию про функцию zip. Воспользуйтесь модулем pandas:

import pandas as pd

list_b = ['2021-09-14', '0', '0', '0', '0', '0', '212', '212', '5.0', '100.0%', 
'2021-09-13', '0', '0', '0', '0', '0', '159', '159', '5.0', '100.0%',
'2021-09-11', '0', '0', '0', '0', '0', '145', '145', '5.0', '100.0%', 
'2021-09-10', '0', '0', '0', '0', '0', '196', '196', '5.0', '100.0%', 
'2021-09-09', '0', '0', '0', '6', '0', '111', '117', '4.9', '94.87%', 
'2021-09-08', '0', '0', '0', '0', '0', '103', '103', '5.0', '100.0%', 
'2021-09-07', '0', '0', '0', '0', '0', '201', '201', '5.0', '100.0%',
'2021-09-06', '3', '0', '0', '0', '0', '135', '135', '5.0', '100.0%', 
'2021-09-04', '0', '0', '0', '0', '0', '95', '95', '5.0', '100.0%', 
'2021-09-03', '0', '0', '0', '0', '0', '127', '127', '5.0', '100.0%']

list_a = ["Дата: ", "с ошибкой: ", "с оценкой 1: ", "с оценкой 2: ", "с оценкой 3: ", 
"с оценкой 4: ", "с оценкой 5: ", "Всего: ", "Среднее: ", "Процент удовлетворенности: "]

data = [list_b[x:x+10] for x in range(0, len(list_b), 10)]

df = pd.DataFrame(data, columns=list_a)

теперь df у вас:

       Дата:  с ошибкой:   ... Среднее:  Процент удовлетворенности: 
0  2021-09-14           0  ...       5.0                      100.0%
1  2021-09-13           0  ...       5.0                      100.0%
2  2021-09-11           0  ...       5.0                      100.0%
3  2021-09-10           0  ...       5.0                      100.0%
4  2021-09-09           0  ...       4.9                      94.87%
5  2021-09-08           0  ...       5.0                      100.0%
6  2021-09-07           0  ...       5.0                      100.0%
7  2021-09-06           3  ...       5.0                      100.0%
8  2021-09-04           0  ...       5.0                      100.0%
9  2021-09-03           0  ...       5.0                      100.0%

Ну а далее датафрейм можно сразу записать в csv:

df.to_csv('filename.csv')
→ Ссылка
Автор решения: CrazyElf

Разобрать в словарь можно так, хотя я и не уверен, какой именно вы хотите словарь:

d = {key: list_b[i::len(list_a)] for i, key in enumerate(list_a)}
print(d)

Вывод:

{
'Дата: ': ['2021-09-14', '2021-09-13', '2021-09-11', '2021-09-10', '2021-09-09', '2021-09-08', '2021-09-07', '2021-09-06', '2021-09-04', '2021-09-03'], 
'с ошибкой: ': ['0', '0', '0', '0', '0', '0', '0', '3', '0', '0'], 
'с оценкой 1: ': ['0', '0', '0', '0', '0', '0', '0', '0', '0', '0'], 
'с оценкой 2: ': ['0', '0', '0', '0', '0', '0', '0', '0', '0', '0'], 
'с оценкой 3: ': ['0', '0', '0', '0', '6', '0', '0', '0', '0', '0'], 
'с оценкой 4: ': ['0', '0', '0', '0', '0', '0', '0', '0', '0', '0'], 
'с оценкой 5: ': ['212', '159', '145', '196', '111', '103', '201', '135', '95', '127'], 
'Всего: ': ['212', '159', '145', '196', '117', '103', '201', '135', '95', '127'], 
'Среднее: ': ['5.0', '5.0', '5.0', '5.0', '4.9', '5.0', '5.0', '5.0', '5.0', '5.0'], 
'Процент удовлетворенности: ': ['100.0%', '100.0%', '100.0%', '100.0%', '94.87%', '100.0%', '100.0%', '100.0%', '100.0%', '100.0%']
}
→ Ссылка