Конвертировать список Python в JSON - PullRequest
0 голосов
/ 19 мая 2019

Я столкнулся с проблемой, и мне нужна помощь в ее решении.

У меня есть следующая структура данных (список списков):

[
    ["BLUE", "XXL", 98], 
    ["BLUE", "XL", 97], 
    ["BLUE", "L", 99], 
    ["BLUE", "M", 103], 
    ["PINK", "XXL", 104], 
    ["PINK", "XL", 103], 
    ["PINK", "L", 102], 
    ["PINK", "M", 100],
    ["RED", "XXL", 99], 
    ["RED", "XL", 102], 
    ["RED", "L", 109], 
    ["RED", "M", 95],
]

Где первый элементсписка - это цвет, второй элемент списка - это размер, а третий элемент списка - это число.

Возможно ли создать формат JSON из этого списка, как показано ниже:

{
    "BLUE": {
                "XXL": 98,
                "XL": 97,
                "L": 99,
                "M": 103
            },
    "PINK": {
                "XXL": 104,
                "XL": 103,
                "L": 102,
                "M": 100
            },
    "RED": {
                "XXL": 99,
                "XL": 102,
                "L": 109,
                "M": 95
            }
}

Ответы [ 2 ]

2 голосов
/ 19 мая 2019

Да, это возможно.Сначала вам нужно преобразовать его в словарь, затем использовать json.dumps(dictionary) для форматирования словаря в формате JSON.

In [7]: lists = [
   ...:     ["BLUE", "XXL", 98],
   ...:     ["BLUE", "XL", 97],
   ...:     ["BLUE", "L", 99],
   ...:     ["BLUE", "M", 103],
   ...:     ["PINK", "XXL", 104],
   ...:     ["PINK", "XL", 103],
   ...:     ["PINK", "L", 102],
   ...:     ["PINK", "M", 100],
   ...:     ["RED", "XXL", 99],
   ...:     ["RED", "XL", 102],
   ...:     ["RED", "L", 109],
   ...:     ["RED", "M", 95],
   ...: ]

In [8]: import collections
   ...: d = collections.defaultdict(dict)
   ...: for l in lists:
   ...:     d[l[0]][l[1]] = l[2]
   ...:

In [9]: d
Out[9]:
defaultdict(dict,
            {'BLUE': {'XXL': 98, 'XL': 97, 'L': 99, 'M': 103},
             'PINK': {'XXL': 104, 'XL': 103, 'L': 102, 'M': 100},
             'RED': {'XXL': 99, 'XL': 102, 'L': 109, 'M': 95}})

А затем

import json
print(json.dumps(d))

Вывод:

In [10]: import json

In [11]: json.dumps(d)
Out[11]: '{"BLUE": {"XXL": 98, "XL": 97, "L": 99, "M": 103}, "PINK": {"XXL": 104, "XL": 103, "L": 102, "M": 100}, "RED": {"XXL": 99, "XL": 102, "L": 109, "M": 95}}'
0 голосов
/ 19 мая 2019

Вы можете перебирать список и создавать вложенный словарь, перебирая его

from collections import defaultdict

li = [
    ["BLUE", "XXL", 98], 
    ["BLUE", "XL", 97], 
    ["BLUE", "L", 99], 
    ["BLUE", "M", 103], 
    ["PINK", "XXL", 104], 
    ["PINK", "XL", 103], 
    ["PINK", "L", 102], 
    ["PINK", "M", 100],
    ["RED", "XXL", 99], 
    ["RED", "XL", 102], 
    ["RED", "L", 109], 
    ["RED", "M", 95],
]

dct = defaultdict(dict)
#Iterate through the list
for key, *val in li:
    #Create the dictionary of dictionaries
    dct[key][val[0]] = val[1]

print(dict(dct))

Вывод будет

{'BLUE': {'XXL': 98, 'XL': 97, 'L': 99, 'M': 103}, 
'PINK': {'XXL': 104, 'XL': 103, 'L': 102, 'M': 100}, 
'RED': {'XXL': 99, 'XL': 102, 'L': 109, 'M': 95}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...