I believe I did a minor misconcept which I cannot find. Basically, I'm designing a simple data container to hold {key1:[values1], key2:[values2]}.
class Cells(object):
def __init__(self, **kwargs):
self.data = {}
def __data_len__(self):
""" Length of data[first key] list. """
_ = 0
for key in self.data.keys():
if self.data[key]:
_ = len(self.data[key])
break
return _
def subtract_lists(self, x, y):
return [item for item in x if item not in y]
def add(self, to_add):
""" Add columns if not exist """
if not set(to_add.keys()).issubset(self.data.keys()): # New key means adding
new_keys = self.subtract_lists(to_add.keys(), \
self.data.keys()) # it to our dict
newdict = dict.fromkeys(new_keys, \
[] * self.__data_len__())
self.data.update(newdict)
[self.data[key].append(to_add.get(key, '')) for key in self.data.keys()]
print('* Updated data is: %s' % self.data)
##############################
# Now, tests... #
##############################
if __name__ == '__main__':
cells = Cells()
cells.add({'one':1, 'two':2, 'three': 3})
desired output is to be like:
Updated data is: {'one': [1], 'two': [2], 'three': [3]}
but it outputs:
Updated data is: {'one': [1, 2, 3], 'two': [1, 2, 3], 'three': [1, 2, 3]}
i.e. adding every value to every key, which is frustrating. A typo somewhere?