Python3 Разбор JSON с дубликатами ключей

#json #python-3.x #parsing #duplicates #key-value

Вопрос:

Извините за вопрос новичка, есть такой ответ json;

 import json

jsonObj = json.loads("""
{
  "data": [
    {
      "name_space": "name",
      "value": "Angelina"
    },
    {
      "name_space": "surname",
      "value": "Jolie"
    },
    {
      "name_space": "year",
      "value": "1975"
    }
  ]
}
""")
 

и в настоящее время я могу анализировать этот способ

 for meta in jsonObj['data']:
    if meta['name_space'] == 'name':
        print(meta['value'])
    if meta['name_space'] == 'surname':
        print(meta['value'])
    if meta['name_space'] == 'year':
        print(meta['value'])
 

Я изучаю, существуют ли различные способы сделать это и сделать код более чистым или простым.

Комментарии:

1. Всегда ли в словарях данных есть запись «пространство имен» или запись «значение»? Указывает ли вам «пространство имен», какие другие значения доступны в диктанте?

2. Что вы пытаетесь напечатать? for meta in jsonObj['data']: print(meta['value']) напечатал бы то же самое, что вы печатаете в своем примере. Если вы хотите чего-то другого, включите это в свой вопрос.

3. Почти ~30 словарей данных «пространство имен» или «значение» и несколько аналогичных, например, я хочу использовать year значение для получения 1975

Ответ №1:

clean_dict = {x['name_space']: x['value'] for x in jsonObj['data']} дал бы вам следующее dict :

{'name': 'Angelina', 'surname': 'Jolie', 'year': '1975'}

Этот код использует x['name_space'] значение в качестве ваших новых ключей в dict .

Тогда вы сможете распечатать его так, как вам захочется, например print(clean_dict.values()) .

Комментарии:

1. можно ли получить 'value' значение, используя 'name_space' значение?

2. clean_dict['name'] дал бы тебе "Angelina" , если ты это имеешь в виду.

3. Идеально! Спасибо вам 🙂