Запись неравных диктовок в отдельные CSV-файлы - PullRequest
0 голосов
/ 02 апреля 2020

У меня есть вопрос о том, как правильно записать каждый «окончательный» вложенный dict из dict of dicts в отдельный файл csv.

Так как dict из dicts неравномерен и имеет много «слоев», я пытался его решить с помощью рекурсии или для проверки, является ли элемент nx списком, но не удалось. Так что любые подсказки высоко ценятся.

Вот как в основном выглядит структура:

json = {
   "General":{
      "Column":{
         0:"ID",
         1:"Name",
         2:"Value"
      },
      "Count":{
         0:25,
         1:25,
         2:9
      }
   },
   "Distr":{
      "Name":{
         "":{
            "Value":{
               "Count":{
                  "ID1":12.4,
                  "ID2":29.6,
                  "ID3":9.1
               }
            }
         }
      }
   },
   "Digit":{
      "Value":{
         "Std":{
            "2019-04-18 00:00:00":1.5036268714949788,
            "2019-04-23 00:00:00":0.3634739137697553,
            "2019-04-28 00:00:00":0.13565689828487992,
            "2019-05-03 00:00:00":-0.0518006344708256
         },
         "Mean":{
            "2019-04-18 00:00:00":8.7,
            "2019-04-23 00:00:00":1.1,
            "2019-04-28 00:00:00":22.1,
            "2019-05-03 00:00:00":98.5
         }
      }
   }

1 Ответ

2 голосов
/ 02 апреля 2020
>>> test
{'General': {'Column': {0: 'ID', 1: 'Name', 2: 'Value'}, 'Count': {0: 25, 1: 25, 2: 9}}, 'Distr': {'Name': {'': {'Value': {'Count': {'ID1': 12.4, 'ID2': 29.6, 'ID3': 9.1}}}}}, 'Digit': {'Value': {'Std': {'2019-04-18 00:00:00': 1.5036268714949788, '2019-04-23 00:00:00': 0.3634739137697553, '2019-04-28 00:00:00': 0.13565689828487992, '2019-05-03 00:00:00': -0.0518006344708256}, 'Mean': {'2019-04-18 00:00:00': 8.7, '2019-04-23 00:00:00': 1.1, '2019-04-28 00:00:00': 22.1, '2019-05-03 00:00:00': 98.5}}}}
>>> def create_output(element, column_name):
...     if not isinstance(element, dict):
...         print(f"{column_name}: {element}")
...         return
...     for key, value in element.items():
...         create_output(value, f"{column_name}_{key}")
...
>>> create_output(test, "")
_General_Column_0: ID
_General_Column_1: Name
_General_Column_2: Value
_General_Count_0: 25
_General_Count_1: 25
_General_Count_2: 9
_Distr_Name__Value_Count_ID1: 12.4
_Distr_Name__Value_Count_ID2: 29.6
_Distr_Name__Value_Count_ID3: 9.1
_Digit_Value_Std_2019-04-18 00:00:00: 1.5036268714949788
_Digit_Value_Std_2019-04-23 00:00:00: 0.3634739137697553
_Digit_Value_Std_2019-04-28 00:00:00: 0.13565689828487992
_Digit_Value_Std_2019-05-03 00:00:00: -0.0518006344708256
_Digit_Value_Mean_2019-04-18 00:00:00: 8.7
_Digit_Value_Mean_2019-04-23 00:00:00: 1.1
_Digit_Value_Mean_2019-04-28 00:00:00: 22.1
_Digit_Value_Mean_2019-05-03 00:00:00: 98.5
>>>

Вы можете расправить свой словарь. Subdictionary информация затем в ключе. Используйте этот новый ключ в качестве имени столбца.

Здесь я использую _ в качестве разделителя.

...