Search code examples
pythonlistdictionaryselfordereddictionary

How to set the limit for key and value for the Python Program


How to set the limit for the key and value for the below program. I wrote one python function to add key and values. How to limit the number of keys = 3 and values = 4. Need to ignore the more than 3 keys and 4 values are added.

Is there any thing like below given in program

self.size_key = 3
and self.size_value = 4 or [[] for _ in range(5)] 

sample code

class my_dict(dict):    
    def add(self, key, value):
        #if len(value) < 4 and len(key) < 3:
            self.setdefault(key, []).append(value)

    def remove_key(self, key):
        del self[key]

    def remove_value(self, key, value):
        if value in self[key]:
            self[key].remove(value)

dict_obj = my_dict()
dict_obj.add('key1', 'value1')
dict_obj.add('key2', 'value9')
dict_obj.add('key1', 'value3')
print(dict_obj)  

Solution

  • To do what you want, you would need to use an Ordered Dict. Because dicts do not keep an order outside of a list. It would be impossible to predict which key is getting deleted.

    This solves your problem.

    from collections import OrderedDict
    
    class my_dict(OrderedDict):
        def add(self, key, value):
            self.check(key)
            self.setdefault(key, []).append(value)
    
        def check(self, key):
            if len(self.keys()) == 3:
                del self[next(iter(self))]
            if len(self.get(key, [])) == 4:
                del self[key][0]
    
    dict_obj = my_dict()
    dict_obj.add('key1', 'value1')
    dict_obj.add('key2', 'value9')
    dict_obj.add('key1', 'value3')
    dict_obj.add('key1', 'value4')
    dict_obj.add('key1', 'value5')
    dict_obj.add('key1', 'value6')
    dict_obj.add('key3', 'value6')
    dict_obj.add('key4', 'value6')
    print(dict_obj)