Измените один формат json на другой

#python #json #python-3.x

#python #json #python-3.x

Вопрос:

Я новичок в программировании, я хочу изменить следующий формат JSON. Я хочу удалить ключевое слово «content», как показано в примере ниже.

 [{
    "content": "abc",
    'entities': [
        [44, 55, "SEN"],
        [27, 31, "FIN"]
    ]
}, {
    "content": "xyz",
    'entities': [
        [8, 17, "FIN"]
    ]
}, {
    "content": "klm",
    'entities': [
        [18, 26, "FIN"]
    ]
}]
 

Для

 [
    ('abc', {
        'entities': [(44, 55, "SEN"), (27, 31, "FIN")]
    }),
    ('xyz', {
        'entities': [(8, 17, "FIN")]
    }),
    ('klm', {
        'entities': [(18, 26, "FIN"]
    })
]
 

Пожалуйста, помогите.
Спасибо

Ответ №1:

 >>> data = [{
...     "content": "abc",
...     'entities': [
...         [44, 55, "SEN"],
...         [27, 31, "FIN"]
...     ]
... }, {
...     "content": "xyz",
...     'entities': [
...         [8, 17, "FIN"]
...     ]
... }, {
...     "content": "klm",
...     'entities': [
...         [18, 26, "FIN"]
...     ]
... }]
>>> [(dct["content"], {"entities": list(map(tuple, dct["entities"]))}) for dct in data]
[('abc', {'entities': [(44, 55, 'SEN'), (27, 31, 'FIN')]}), ('xyz', {'entities': [(8, 17, 'FIN')]}), ('klm', {'entities': [(18, 26, 'FIN')]})]
>>> 
 

В более удобочитаемом формате:

 [
    # 2. build a tuple...
    (
      # 3. whose first element is `content`
      dct["content"],
      # 4. and the second - a dictionary with one element
      {
        # 5. which is a list of entities that are converted to `tuple`
        "entities": list(map(tuple, dct["entities"]))
      }
    )
    # 1. For each dictionary...
    for dct in data
]
 

Ответ №2:

Вы можете использовать понимание списка как:

 lst = [{
    "content": "abc",
    'entities': [
        [44, 55, "SEN"],
        [27, 31, "FIN"]
    ]
}, {
    "content": "xyz",
    'entities': [
        [8, 17, "FIN"]
    ]
}, {
    "content": "klm",
    'entities': [
        [18, 26, "FIN"]
    ]
}]
    
output = [( elt["content"], { "entities": [tuple(e) for e in elt["entities"]] } ) for elt in lst]
print(output)