【发布时间】:2012-10-09 02:46:09
【问题描述】:
我有一个 dict 子类,它的工作是在嵌套 dict 键不存在时动态添加它,如果调用 append 则执行列表追加:
class PowerDict(dict):
def __getitem__(self, item):
try:
return dict.__getitem__(self, item)
except KeyError:
value = self[item] = type(self)()
return value
def append(self,item):
if type(self) != list:
self = list()
self.append(item)
所以
a = PowerDict()
a['1']['2'] = 3
产生输出:
a = {'1': {'2': 3}}
但是,有时我需要做这样的事情:
b = PowerDict()
b['1']['2'].append(3)
b['1']['2'].append(4)
应该产生输出:
b = {'1': {'2': [3, 4]}}
但上面的代码会产生输出:
{'1': {'2': {}}}
我错过了什么?
【问题讨论】:
-
你不能说
self=list()...您需要将键设置为等于列表... self 是一个字典 -
确实,
self = list()只是重新绑定了变量self。 -
您是否附加到多索引格式?我发现一个由元组索引的字典更优雅:
a[1,2]=3。
标签: python list dictionary append subclass