DefaultDict的替代方案
问题描述:
不幸的是,对于我来说,我需要向后兼容w/Python 2.4,并且defaultdict
在2.4版本中不存在。DefaultDict的替代方案
什么可以替代它?
对于给定的关键数据结构的列表:
[{'red': (12, 1, 12), 'white': (30, 2, 60), 'blue': (8, 1, 4), 'orange': (9, 4, 8), 'black': (10, 12, 4)}]
编辑: 添加使用信息。首先,我建立与默认的字典:
defDict[key1].append(... ...)
那么它是通过几种方法为关键:VAL(名单)查找和密钥删除。
具体为删除:
if len(defDict[key1][0]) == 0:
del defDict[key1]
编辑:错误的NoneType
print "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
print defDict[key]
print "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"
if len(defDict[key][0]) == 0:
#del defDict[key]
错误:
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
None
yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
if len(defDict[key][0]) == 0:
TypeError: 'NoneType' object has no attribute '__getitem__'
我认为错误来自key
:
print "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
print defDict[key]
print "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"
输出:
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
None
yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
答
一个不错位,您可以实现自己的defaultdict
在一个非常简单的方式。
def defaultdict(default_type):
class DefaultDict(dict):
def __getitem__(self, key):
if key not in self:
dict.__setitem__(self, key, default_type())
return dict.__getitem__(self, key)
return DefaultDict()
list_dict = defaultdict(list)
list_dict['a'].append(1)
print list_dict # {'a': [1]}
+0
只有有效的答案。 –
答
defaultdict(list)
是糖作为
if key not in d:
d[key] = []
d[key].append(...)
答
很简单写一个补丁包,对defaultdict
:
class defaultdict(dict):
def __init__(self, default_factory, *args, **kw):
dict.__init__(self, *args, **kw)
self.default_factory = default_factory
def __getitem__(self, key):
try:
return dict.__getitem__(self, key)
except KeyError:
result = self.default_factory()
self[key] = result
return result
取决于你用它做什么。 'get',''setdefault'或明确的'in'检查是通常的选择。 – user2357112
@ user2357112谢谢。我编辑了这个问题。首先我构建字典,然后通过一些方法调用它。 –
期望的输出是什么? –