rel*_*let 11 python dictionary decorator
使用深层嵌套的python dicts,我希望能够在这样的数据结构中分配值,如下所示:
mydict[key][subkey][subkey2]="value"
Run Code Online (Sandbox Code Playgroud)
无需检查mydict [key]等实际上是否设置为dict,例如使用
if not key in mydict: mydict[key]={}
Run Code Online (Sandbox Code Playgroud)
子代的创建应该在飞行中发生.什么是允许等价的最优雅方式 - 可能在标准上使用装饰器<type 'dict'>?
Joh*_*ooy 25
class D(dict):
def __missing__(self, key):
self[key] = D()
return self[key]
d = D()
d['a']['b']['c'] = 3
Run Code Online (Sandbox Code Playgroud)
Dav*_*ebb 12
您可以使用元组作为dict的键,然后您根本不必担心子字符:
mydict[(key,subkey,subkey2)] = "value"
Run Code Online (Sandbox Code Playgroud)
或者,如果您出于某种原因确实需要使用子区域,则可以使用collections.defaultdict.
对于两个级别,这很简单:
>>> from collections import defaultdict
>>> d = defaultdict(dict)
>>> d['key']['subkey'] = 'value'
>>> d['key']['subkey']
'value'
Run Code Online (Sandbox Code Playgroud)
对于三个,它稍微复杂一点:
>>> d = defaultdict(lambda: defaultdict(dict))
>>> d['key']['subkey']['subkey2'] = 'value'
>>> d['key']['subkey']['subkey2']
'value'
Run Code Online (Sandbox Code Playgroud)
四个或更多级别留给读者练习.:-)
| 归档时间: |
|
| 查看次数: |
7586 次 |
| 最近记录: |