Я получаю следующий дикт от метода:
{'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
Есть ли другой способ конвертировать его?
Большое спасибо!
Взгляните на: pypi.org/project/dictfier
@olinox14 Большое спасибо за совет. Я посмотрел на это, но я не понимаю, как я могу решить это с помощью dictfier, поскольку он преобразует объекты в словари, а не наоборот.
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))
Возможный дубликат json сериализовать словарь с кортежами в качестве ключа