DeaD_EyE icon

CaseInsensitiveDict

DeaD_EyE | PRO | 06/28/22 08:31:52 AM UTC (Edited) | 0 ⭐ | 727 👁️ | Never ⏰ | []
Python |

1.43 KB

|

None

|

0 👍

/

0 👎

from collections import UserDict
 
 
class CaseInsensitiveDict(UserDict):
    def __init__(self, iterable=None, **mapping):
        iterable = iterable or []
        
        if isinstance(iterable, dict):
            iterator = iterable.items()
        else:
            iterator = iterable
            
        items = {k.casefold(): v for k, v in iterator}
        super().__init__(items, **mapping)
 
 
    def __getitem__(self, key):
        return super().__getitem__(key.casefold())
 
    def __setitem__(self, key, value):
        super().__setitem__(key.casefold(), value)
 
    def __contains__(self, key):
        return super().__contains__(key.casefold())
 
    def get(self, key, default=None):
        key = key.casefold()
        if key in self:
            return super().__getitem__(key)
        else:
            return default
 
    def has_key(self, key):
        return key.casefold() in self
 
    def pop(self, key, default=None):
        key = key.casefold()
        if key in self:
            return super().pop(key)
        else:
            return default
 
    def setdefault(self, *args, **kwargs):
        raise NotImplementedError
 
 
data = CaseInsensitiveDict({"A": 42, "b": 1337}, C=44)
print(data)
print(data["a"])
print(data["A"])
print(data["b"])
print(data["B"])
print(data.get("C", "MISSING"))
print(data.get("A", "MISSING"))
print(data.pop("A"))
print(data)
print(data.pop("B"))

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎