GeekyDad
GeekyDad

Reputation: 75

How do I convert a list to dictionary with specific format in python?

I'm developing a Web API, I have a list from a query results like this:

[{'ORG': 'Asset Management',
  'SURVEY_DATE': datetime.date(2018, 4, 23),
  'NOS': '1'},
 {'ORG': 'Asset Management',
  'SURVEY_DATE': datetime.date(2018, 5, 8),
  'NOS': '1'},
 {'ORG': 'Chief Advocacy Office',
  'SURVEY_DATE': datetime.date(2018, 10, 31),
  'NOS': '50'},
 {'ORG': 'Chief Advocacy Office',
  'SURVEY_DATE': datetime.date(2019, 2, 13),
  'NOS': '1'},
 {'ORG': 'Chief Information Office',
  'SURVEY_DATE': datetime.date(2018, 1, 22),
  'NOS': '1'},
 {'ORG': 'Chief Information Office',
  'SURVEY_DATE': datetime.date(2018, 2, 2),
  'NOS': '1'}]

I tried to convert it first into a dataframe and code it like this:

 df1 = df1.groupby('ORG').apply(lambda x: dict(zip(x['SURVEY_DATE'],x['NOS']))).to_dict()

but is there a way that I dont need to convert it in dataframe?

And I want to format it into a dictionary like the one below for my response data:

{
  "Asset Management": [
    {
      "date": "2019-03-30",
      "numberOfSurveys": 76
    },
    {
      "date": "2019-03-31",
      "numberOfSurveys": 83
    }
  ],
  "Chief Advocacy Office": [
   {
      "date": "2019-03-30",
      "numberOfSurveys": 50
   },
   {
     "date": "2019-03-31",
     "numberOfSurveys": 40
   }
  ],
  "Chief Information Office": [
   {
       "date": "2019-03-30",
      "numberOfSurveys": 50
   },
   {
      "date": "2019-03-31",
      "numberOfSurveys": 40
   }
  ]
}

Upvotes: 1

Views: 49

Answers (1)

Mahi
Mahi

Reputation: 21893

Use collections.defaultdict():

import collections

result = collections.defaultdict(list)
for row in original_data:
    result[row['ORG']].append({
        'date': row['SURVEY_DATE'],
        'numberOfSurveys': row['NOS'],
    })

Upvotes: 4

Related Questions