python - , , , :
, , , :
if isinstance(key, str):
return key.encode('utf-8')
return key
, :
class SDict(dict):
@staticmethod
def prepare_key(key):
if isinstance(key, str):
return key.encode('utf-8')
return key
def __contains__(self, key):
return super().__contains__(self.prepare_key(key))
def __getitem__(self, key):
return super().__getitem__(self.prepare_key(key))
def __setitem__(self, key, value):
return super().__getitem__(self.prepare_key(key), value)
def __delitem__(self, key):
return super().__delitem__(self.prepare_key(key))
dict:
>>> d1 = {b'a': 1, b'b': 2}
>>> d2 = SDict(d1)
>>> d2
{b'a': 1, b'b': 2}
in :
>>> 'a' in d1
False
>>> 'a' in d2
True
>>> 'c' in d2
False
>>> 'c' in d1
False
proplerly:
>>> d1['a']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'a'
>>> d1[b'a']
1
>>> d2[b'a']
1
>>> d2['a']
1