Разделить JSON на равные части с помощью Python

У меня есть большой json вида {'key1': 'value1', 'key2': 'value2', 'key3': 'value3', 'key4': 'value4',....etc} Мне нужно его разделить на равные части по 2 пары ключ-значение и положить их в разные файлы (т.е. файл1 - 'key1': 'value1', 'key2': 'value2', файл2 - 'key3': 'value3', 'key4': 'value4').

Код ниже работает, но записывает в файл только ключи, т.е. на выходе ["key1", "key2"]. Как записывать парами ключ-значение? И желательно в фигурных {}, а не квадратных скобках.

import json
from itertools import zip_longest

dashboard_lists = {'key1': 'value1', 'key2': 'value2', 'key3': 'value3', 'key4': 'value4'}

def grouper(iterable, n, fillvalue=''):
    "Collect data into fixed-length chunks or blocks"
    # grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx
    args = [iter(iterable)] * n
    print(args)
    return zip_longest(fillvalue=fillvalue, *args)

#print(type(dashboard_lists))

for i, group in enumerate(grouper(dashboard_lists, 2)):
    #print(group)
    with open('path_{}.json'.format(i), 'w') as outputfile:
        json.dump(list(group), outputfile)

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

Автор решения: D.Vinogradov

Ваша функция на выходе выдает список кортежей из ключей, разбитых по 2, плюс в конце еще и добавляется (' ') если ключей нечетное количество.

Зачем так сложно.

Используйте другую функцию для деления на части вашего словаря

import json

dashboard_lists = {'key1': 'value1', 'key2': 'value2', 'key3': 'value3', 'key4': 'value4', 'key5': 'value5'}

def dict_chunks(dict_of, n):
    keys = list(dict_of.keys())
    for i in range(0, len(keys), n):
        yield {k: dict_of[k] for k in keys[i: i + n]}

Потом можете пройтись по тому же циклу, что у вас уже есть, только из dump уберите list

json.dump(group, outputfile)

В файл не записывал, но если посмотреть что получается на выходе этого цикла с применением функции, что выше, то видим следующее

{"key1": "value1", "key2": "value2"}
{"key3": "value3", "key4": "value4"}
{"key5": "value5"}
→ Ссылка
Автор решения: Denis

Нашел другой способ решить эту проблему:

from typing import List, Dict
    res: List[Dict] = []
    
tmp_res: Dict = {}
for k, v in dashboard_lists.items():
    tmp_res[k] = v

    if len(tmp_res.keys()) > 2:
        res.append(copy.deepcopy(tmp_res))
        tmp_res = {}
if tmp_res:
    res.append(copy.deepcopy(tmp_res))
    i = 0
    for it in res:
        i += 1
        with open('paths_{}.js'.format(i), 'w', encoding='utf-8') as outputfile:
            json.dump(it, outputfile, ensure_ascii=False)
→ Ссылка