Search code examples
pythonloopsclassiterator

Make dictionary iterable inside Python Class


Noob in python class. Try to make iterations inside class. Is there any solution for this problem?

# some dict
d_init = {'a': 'a_value', 'b': 'b_value', 'c': 'c_value'}


# class 1
class Store1:
    def __init__(self, input_dict):
        self.class_dict = input_dict


# class 2
class Store2:
    def __init__(self, input_dict):
        self.res = []
        self.class_dict = input_dict
        self.class_list = [self.res.append(self.class_dict[k1]) for k1 in self.class_dict.keys()]



obj1 = Store1(d_init)
print("iter 1 = ", [obj1.class_dict[k] for k in obj1.class_dict.keys()])


obj2 = Store2(d_init)
print("iter 2 = ", obj2.class_list)

Output:

iter 1 = ['a_value', 'b_value', 'c_value']
iter 2 = [None, None, None]

Desired output:

iter 1 = ['a_value', 'b_value', 'c_value']
iter 2 = ['a_value', 'b_value', 'c_value']

Solution

  • self.class_list = [self.res.append(self.class_dict[k1]) for k1 in self.class_dict.keys()]
    

    this right here will just append self.res, so you should return self.res and remove class_list or remove self.res and change your code to

    self.class_list = [self.class_dict[k1] for k1 in self.class_dict.keys()]