Manatsa Mbanje
Manatsa Mbanje

Reputation: 31

Python classes combined with a list of dictionaries

I want to make a python class from a list of dictionaries. I tried the following but it tells me that i cant have list indices that are dictionaries.

class Dict_to_Class(object):
    def __init__(self, s_dict):
        for key in s_dict:
            setattr(self, key, s_dict[key])
if __name__ == '__main__':
    s_dict = [{'cs': '10', 'ca': '11', 'cb': '12', 'cc': 'same'}, {'cs': '114', 'ca': '121', 'cb': '132', 'cc': 'diff'},
              {'cs': '20', 'ca': '21', 'cb': '22', 'cc': 'same'}, {'cs': '210', 'ca': '211', 'cb': '212', 'cc': 'diff'},
              {'cs': '10', 'ca': '115', 'cb': '12', 'cc': 'same'}, {'cs': '101', 'ca': '11', 'cb': '172', 'cc': 'diff'},
              {'cs': '10', 'ca': '181', 'cb': '129', 'cc': 'same'}, {'ca': '11', 'cb': '12', 'cc': 'same'}]
    result = Dict_to_Class(s_dict)
    print(type(result))

This was my way of testing wether it works or not.

Upvotes: 0

Views: 59

Answers (1)

ignacioct
ignacioct

Reputation: 345

s_dict is not a dictionary, but a list of dictionaries. You have to update your code accordingly to that, and access to each position using numeric indices.

If you choose one element of your list, your code works:

class Dict_to_Class(object):
    def __init__(self, s_dict):
        
        for key in s_dict:
            setattr(self, key, s_dict[key])

if __name__ == '__main__':
    s_dict = [{'cs': '10', 'ca': '11', 'cb': '12', 'cc': 'same'}, {'cs': '114', 'ca': '121', 'cb': '132', 'cc': 'diff'},
              {'cs': '20', 'ca': '21', 'cb': '22', 'cc': 'same'}, {'cs': '210', 'ca': '211', 'cb': '212', 'cc': 'diff'},
              {'cs': '10', 'ca': '115', 'cb': '12', 'cc': 'same'}, {'cs': '101', 'ca': '11', 'cb': '172', 'cc': 'diff'},
              {'cs': '10', 'ca': '181', 'cb': '129', 'cc': 'same'}, {'ca': '11', 'cb': '12', 'cc': 'same'}]
    result = Dict_to_Class(s_dict[0])
    print(type(result))

This code returns:

<class '__main__.Dict_to_Class'>

Upvotes: 1

Related Questions