Initialize List to a variable in a Dictionary inside a loop

dictionary, python

Solution

Your code is not appending elements to the lists; you are instead replacing the list with single elements. To access values in your existing dictionaries, you must use indexing, not attribute lookups (`item['name']`, not `item.name`).

Use `collections.defaultdict()`:

from collections import defaultdict

example_dictionary = defaultdict(list)
for item in root_values:
    example_dictionary[item['name']].append(item['value'])

`defaultdict` is a `dict` subclass that uses the `__missing__` hook on `dict` to auto-materialize values if the key doesn't yet exist in the mapping.

or use `dict.setdefault()`:

example_dictionary = {}
for item in root_values:
    example_dictionary.setdefault(item['name'], []).append(item['value'])

Problem

I have been working for a while in Python and I have solved this issue using "try" and "except", but I was wondering if there is another method to solve it. Basically I want to create a dictionary like this: ``` example_dictionary = {"red":[2,3,4],"blue":[6,7,8],"orange":[10,11,12]} ``` So if I have a variable with the following content: ``` root_values = [{"name":"red","value":2},{"name":"red","value":3},{"name":"red","value":4},{"blue":6}...] ``` My way to implement the example_dictionary was: ``` example_dictionary = {} for item in root_values: try: example_dictionary[item.name].append(item.value) except: example_dictionary[item.name] =[item.value] ``` I hope my question is clear and someone can help me with this. Thanks.

Original source