使用预定义的键创建字典

Lev*_*ell 3 python dictionary

在python中,有没有办法创建一个被视为字典但在创建新实例时预定义键的类?

Rya*_*rom 10

您也可以让dict子类通过覆盖将键限制为预定义列表 __setitem__()

>>> class LimitedDict(dict):
    _keys = "a b c".split()
    def __init__(self, valtype=int):
        for key in LimitedDict._keys:
            self[key] = valtype()
    def __setitem__(self, key, val):
        if key not in LimitedDict._keys:
            raise KeyError
        dict.__setitem__(self, key, val)


>>> limited = LimitedDict()
>>> limited['a']
0
>>> limited['a'] = 3
>>> limited['a']
3
>>> limited['z'] = 0

Traceback (most recent call last):
  File "<pyshell#61>", line 1, in <module>
    limited['z'] = 0
  File "<pyshell#56>", line 8, in __setitem__
    raise KeyError
KeyError
>>> len(limited)
3
Run Code Online (Sandbox Code Playgroud)


Pao*_*ino 9

您可以轻松扩展任何内置类型.这就是你用dict做的方法:

>>> class MyClass(dict):
...     def __init__(self, *args, **kwargs):
...             self['mykey'] = 'myvalue'
...             self['mykey2'] = 'myvalue2'
...
>>> x = MyClass()
>>> x['mykey']
'myvalue'
>>> x
{'mykey2': 'myvalue2', 'mykey': 'myvalue'}
Run Code Online (Sandbox Code Playgroud)

我无法找到谈论这个的Python文档,但是非常受欢迎的书Dive Into Python(可在线免费获得)有一些例子可以做到这一点.

  • 我想你应该从http://stackoverflow.com/questions/817884/creating-dictionaries-with-pre-defined-keys/818019#818019(甚至更好的用户超级)添加对dict .__ init__的调用. (2认同)