Поиск в файле json возвращает часть ключа в столбце фрейма данных

#python #python-3.x #for-loop

#python #python-3.x #для цикла

Вопрос:

У меня есть файл json. Это выглядит так:

 example = {"evaluation user1":{
      "results test1": {
        "chapter": "Chapter1",
        "Chapter_type": "Chemistry1",
        "Exercice 1 code:Chem01": "Wright",
        "Exercice 2 code:Chem02": "Wrong",
        "Exercice 3 code:Chem03": "Wrong",
        "userEmail": "user1@mail.com",
        },
      "results test2": {
        "chapter": "Chapter1",
        "Chapter_type": "Chemistry2",
        "Exercice 1 code:Chem01": "Wrong",
        "Exercice 2 code:Chem02": "Wright",
        "Exercice 3 code:Chem03": "Wrong",
        "userEmail": "user1@mail.com",
        }}
    }
  

Мне нужно извлечь ключ / значения и добавить их в фрейм данных.
Я сделал что-то вроде этого:

 for key, value in example.items():
  if 'evaluation' in key:
    for key1, value1 in value.items():
      computedValues = {}
      computedValues['Email'] = value['userEmail']
      computedValues['Chapter'] = value['chapter']
  

Это сработало для ключей / значений, таких как «глава»: «Глава 1» из примера.

Моя проблема в том, что мне нужно будет извлечь содержимое ключа «exercices»:

 Code     Answer
Chem01

Email              Test     Code         Answer
user1@mail.com     test1    Chem01       Wright
user1@mail.com     test1    Chem02       Wrong
user1@mail.com     test1    Chem03       Wrong
user1@mail.com     test2    Chem01       Wrong
user1@mail.com     test2    Chem02       Wright
user1@mail.com     test2    Chem03       Wrong
  

В принципе, мне нужно было бы получить доступ к ключу / значению (например, электронной почте) в столбце / строке, но мне нужно было бы получить доступ к части ключа / значения упражнений в строках, потому что у меня может быть много кодов для упражнений, и я не хочу иметь сотни столбцов.
Кто-нибудь может мне помочь с этим?

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

1. можете ли вы поделиться своим целевым результатом? Я не понимаю, какой exercices столбец вы имеете в виду?

2. Не столбец. В исходном примере json упражнения представлены в виде информации о ключе / значении: «Код упражнения 1: Chem01»: «Неверно»,

Ответ №1:

Изменен ваш пример кода для построения списка списков:

 computedValues = []

for key, value in example.items():
  if 'evaluation' in key:
    for key1, value1 in value.items():
      test0, test = key1.split(" ")
      email = value1.pop('userEmail')
      chapter = value1.pop('chapter')
      chapter_type = value1.pop('Chapter_type')
      for key2, value2 in value1.items():
        code0, code = key2.split(':')
        computedValues.append([email, test, chapter, code, value2])
  

Результат будет:

 [['user1@mail.com', 'test1', 'Chapter1', 'Chem01', 'Wright'],
 ['user1@mail.com', 'test1', 'Chapter1', 'Chem02', 'Wrong'],
 ['user1@mail.com', 'test1', 'Chapter1', 'Chem03', 'Wrong'],
 ['user1@mail.com', 'test2', 'Chapter1', 'Chem01', 'Wrong'],
 ['user1@mail.com', 'test2', 'Chapter1', 'Chem02', 'Wright'],
 ['user1@mail.com', 'test2', 'Chapter1', 'Chem03', 'Wrong']]
  

Я не понимаю, почему вы пытаетесь снова поместить свои обработанные данные в dict.
Если бы вы уточнили конечный результат, я мог бы обновить ответ.