Как разобрать содержимое списка dicts в json с помощью python3

Мой файл json:

{
"data": [
    {
        "features": {
            "location": "West Springfield, MA",
            "geo_type": "User location",
            "screen_name": "JtTatro",
            "primary_geo": "West Springfield, MA",
            "id": 2158092352,
            "tweets": 1,
            "name": "Jim Tatro"
        },
        "user_id": 2158092352
    }

,
{
            "features": {
                "location": "Tijuana, Baja California",
                "geo_type": "User location",
                "screen_name": "YuitziContreras",
                "primary_geo": "Tijuana, Baja California",
                "id": 996917180980744193,
                "tweets": 1,
                "name": "yuitzi contreras"
            },
            "user_id": 996917180980744193
        }
    ]
}

Я пытаюсь проанализировать данные, хранящиеся в функции dict. Мой код на данный момент:

import json

input_file = open ('file.json')
json_array = json.load(input_file)
tweet_list = []
features_list = []
user_list =[]

for item in json_array:
        for item2 in json_array[item]:
            tweet_list.append(item2)


for features,user in tweet_list:
    print(features,user)

приведенный выше код возвращает имена dict: features, user_id. как можно было бы получить содержимое каждого поля dict, чтобы я мог передать их в свою базу данных?

Например, получить местоположение, geo_type и т. д.

Вы получите больше и точных ответов, если создадите пример Минимальный, полный и поддающийся проверке. Особенно убедитесь, что входные и ожидаемые тестовые данные являются полными (не псевдоданными), и их можно легко вырезать и вставить в редактор, чтобы можно было протестировать предлагаемые решения.

Stephen Rauch 28.05.2018 21:50

Я не понимаю вопроса. Какой у вас желаемый результат? И вы четко знаете, как получить доступ к элементам в dict, так что же мешает вам получить этот вывод?

Aran-Fey 28.05.2018 21:56
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
2
61
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

В JSON [] представляет собой массив, а {} представляет объект. Python анализирует объект JSON (например, {"features": ..., "user_id": ...}) как dict. Вы должны использовать метод .items() для получения пар ключ-значение из dict. Итерация по дикту дает только ключи.

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

вы можете проанализировать features, используя понимание списка:

features = [v['features'] for v in json_array['data']]

Если в какой-либо строке нет ключа с именем features, то v['features'] выбрасывает KeyError.

Чтобы избежать этого

features = [v['features'] for v in json_array['data'] if 'features' in v.keys()]

аналогичным образом может быть сконструирован user_list.

И, наконец, tweet_list, который функционально выглядит как zip из features и user_list, можно напрямую сконструировать, используя понимание списка и распаковку словаря, например:

tweet_list = [dict(v['features'], **{'user_id': v['user_id']}) 
              for v in json_array['data']
              if 'features' in v.keys() and 'user_id' in v.keys()]

# tweet_list outputs:

[{'geo_type': 'User location',
  'id': 2158092352,
  'location': 'West Springfield, MA',
  'name': 'Jim Tatro',
  'primary_geo': 'West Springfield, MA',
  'screen_name': 'JtTatro',
  'tweets': 1,
  'user_id': 2158092352},
 {'geo_type': 'User location',
  'id': 996917180980744193,
  'location': 'Tijuana, Baja California',
  'name': 'yuitzi contreras',
  'primary_geo': 'Tijuana, Baja California',
  'screen_name': 'YuitziContreras',
  'tweets': 1,
  'user_id': 996917180980744193}]

# features outputs
[{'geo_type': 'User location',
  'id': 2158092352,
  'location': 'West Springfield, MA',
  'name': 'Jim Tatro',
  'primary_geo': 'West Springfield, MA',
  'screen_name': 'JtTatro',
  'tweets': 1},
 {'geo_type': 'User location',
  'id': 996917180980744193,
  'location': 'Tijuana, Baja California',
  'name': 'yuitzi contreras',
  'primary_geo': 'Tijuana, Baja California',
  'screen_name': 'YuitziContreras',
  'tweets': 1}]

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