PsyOrc
PsyOrc

Reputation: 47

Python: How to Build a Dictionary from a list of dictionarys

I have to transform a list of dicts to a list of dicts with a specific structure.

The list looks like this:

[
  {
    'manufacurer': 'VW',
    'group': 'Passat',
    'age': 2
    etc.
  },
  {
    'manufacurer': 'Audi',
    'group': 'Quadro',
    'age': 0.5
    etc.
  },
  {
    'manufacurer': 'VW',
    'group': 'Golf',
    'age': 6,
    etc.
  },
  ...
]

The result in something like this:

[
  {
    "manufacurer": "Audi",
    "value_list": [
                    {
                      'manufacurer': 'Audi',
                      'group': 'Quadro',
                      'age': 0.5
                       etc.
                    }
                  ]
  },
  {
    "manufacurer": "VW",
    "value_list": [
                    {
                      'manufacurer': 'VW',
                      'group': 'Passat',
                      'age': 2
                       etc.
                    },
                    {
                      'manufacurer': 'VW',
                      'group': 'Golf',
                      'age': 6
                       etc.
                    }
                  ]
  }
]

how do I get this result?

Upvotes: 1

Views: 41

Answers (1)

Andrej Kesely
Andrej Kesely

Reputation: 195593

lst = [
  {
    'manufacurer': 'VW',
    'group': 'Passat',
    'age': 2
  },
  {
    'manufacurer': 'Audi',
    'group': 'Quadro',
    'age': 0.5
  },
  {
    'manufacurer': 'VW',
    'group': 'Golf',
    'age': 6,
  },
]

out = {}
for item in lst:
    out.setdefault(item['manufacurer'], {})['manufacurer'] = item['manufacurer']
    out[item['manufacurer']].setdefault('value_list', []).append(item)

out = list(out.values())

# pretty print the list:    
from pprint import pprint
pprint(out)

Prints:

[{'manufacurer': 'VW',
  'value_list': [{'age': 2, 'group': 'Passat', 'manufacurer': 'VW'},
                 {'age': 6, 'group': 'Golf', 'manufacurer': 'VW'}]},
 {'manufacurer': 'Audi',
  'value_list': [{'age': 0.5, 'group': 'Quadro', 'manufacurer': 'Audi'}]}]

Upvotes: 1

Related Questions