Преобразование python dict в Json

Я получаю следующий дикт от метода:

{'patterns': {(38,): 2, (19,): 4, (9, 19): 3, (9,): 4}, 
  'rules': {(9,): ((19,), 0.75), (19,): ((9,), 0.75)}
 }

Когда я пытаюсь преобразовать его в Json с помощью json.dumps(myDict), я получаю следующую ошибку:

TypeError: keys must be str, int, float, bool or None, not tuple

Есть ли другой способ конвертировать его?

Большое спасибо!

Возможный дубликат json сериализовать словарь с кортежами в качестве ключа

hiro protagonist 22.05.2019 14:47

Взгляните на: pypi.org/project/dictfier

olinox14 22.05.2019 14:53

@olinox14 Большое спасибо за совет. Я посмотрел на это, но я не понимаю, как я могу решить это с помощью dictfier, поскольку он преобразует объекты в словари, а не наоборот.

Trimes 22.05.2019 15:30
Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
1
3
1 707
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

json поддерживает только строку в качестве ключа, поэтому кортеж в качестве ключа не разрешен

Как сказал @SingleNegationElimination в его ответ на аналогичный вопрос:

You can't serialize that as json, json has a much less flexible idea about what counts as a dict key than python.

Однако с небольшим пользовательским расширением функции remap_keys @SingleNegationElimination вы можете преобразовать недопустимый dict в действительный json объект.

def remap_keys(d):
    if not isinstance(d, dict):
        return d
    rslt = []
    for k, v in d.items():
        k = remap_keys(k)
        v = remap_keys(v)
        rslt.append({'key': k, 'value': v})
    return rslt

>>> remap_keys(myDict)
[{'key': 'patterns',
  'value': [{'key': (38,), 'value': 2},
            {'key': (19,), 'value': 4},
            {'key': (9, 19), 'value': 3},
            {'key': (9,), 'value': 4}]},
 {'key': 'rules',
  'value': [{'key': (9,), 'value': ((19,), 0.75)},
            {'key': (19,), 'value': ((9,), 0.75)}]}]

И вы можете успешно json.dumps свой dict:

json.dumps(remap_keys(myDict))

Другие вопросы по теме