如何在Python中创建列表字典的有序字典
跟下面的班级如何在Python中创建列表字典的有序字典,python,dictionary,Python,Dictionary,跟下面的班级 from collections import defaultdict, OrderedDict class NestedOrderedDict(OrderedDict): def __missing__(self,k): val = self[k] = NestedOrderedDict() return self[k] 我试着制作列表词典的有序词典 orddodol = NestedOrderedDict() orddodol["foo
from collections import defaultdict, OrderedDict
class NestedOrderedDict(OrderedDict):
def __missing__(self,k):
val = self[k] = NestedOrderedDict()
return self[k]
我试着制作列表词典的有序词典
orddodol = NestedOrderedDict()
orddodol["foo"]["a"].append(1)
orddodol["foo"]["b"].append(1)
orddodol["foo"]["b"].append(12)
orddodol["bar"]["a"].append(2)
orddodol["bar"]["a"].append(3)
但它没能做到
AttributeError: 'NestedOrderedDict' object has no attribute 'append'
正确的方法是什么?您必须将二级字典值初始化为列表:
from collections import defaultdict, OrderedDict
class NestedOrderedDict(OrderedDict):
def __missing__(self,k):
val = self[k] = NestedOrderedDict()
return self[k]
orddodol = NestedOrderedDict()
orddodol["foo"]["a"] = [] # these
orddodol["foo"]["b"] = [] # three
orddodol["bar"]["a"] = [] # lines
orddodol["foo"]["a"].append(1)
orddodol["foo"]["b"].append(1)
orddodol["foo"]["b"].append(12)
orddodol["bar"]["a"].append(2)
orddodol["bar"]["a"].append(3)
必须将第二级字典值初始化为列表:
from collections import defaultdict, OrderedDict
class NestedOrderedDict(OrderedDict):
def __missing__(self,k):
val = self[k] = NestedOrderedDict()
return self[k]
orddodol = NestedOrderedDict()
orddodol["foo"]["a"] = [] # these
orddodol["foo"]["b"] = [] # three
orddodol["bar"]["a"] = [] # lines
orddodol["foo"]["a"].append(1)
orddodol["foo"]["b"].append(1)
orddodol["foo"]["b"].append(12)
orddodol["bar"]["a"].append(2)
orddodol["bar"]["a"].append(3)
或者,您也可以像本文一样使用ordered实现defaultdict
或者,您也可以像本文一样使用ordered实现defaultdict
您几乎做对了:)如果您想创建有序的字典列表,那么您最好使用defaultdict(list)
:
from collections import defaultdict, OrderedDict
class NestedOrderedDict(OrderedDict):
def __missing__(self, k):
>>>> self[k] = defaultdict(list)
return self[k]
orddodol = NestedOrderedDict()
orddodol["foo"]["a"].append(1)
orddodol["foo"]["b"].append(1)
orddodol["foo"]["b"].append(12)
orddodol["bar"]["a"].append(2)
orddodol["bar"]["a"].append(3)
您几乎做对了:)如果您想创建有序的字典列表,那么您最好使用defaultdict(list)
:
from collections import defaultdict, OrderedDict
class NestedOrderedDict(OrderedDict):
def __missing__(self, k):
>>>> self[k] = defaultdict(list)
return self[k]
orddodol = NestedOrderedDict()
orddodol["foo"]["a"].append(1)
orddodol["foo"]["b"].append(1)
orddodol["foo"]["b"].append(12)
orddodol["bar"]["a"].append(2)
orddodol["bar"]["a"].append(3)
你的预期结果是什么?你的预期结果是什么?呸!这完全改变了
NestedOrderedDict
的功能——你再也不能做类似于orddol[“aa”][“bb”[“cc”]=[]
的事情了。是的,但问题是关于列表字典的有序字典(只有两层)考虑到代码有“foo”和“bar”这样的键,我将其视为一个示例,并没有试图假设它只适用于两个层。他问了“正确的方法”,虽然这对他的例子很有效,但显然不是。呸,这比我强:)这完全改变了NestedorderdICT的功能——例如,你不能再做像Ordododol[“aa”[“bb”[“cc”]=[
这样的事情了。是的,但问题是关于列表字典的有序字典(只有两层),因为代码有像“foo”和“bar”这样的键,我认为这是一个例子,并没有试图假设它只适用于两层。他询问了做这件事的“正确方法”,虽然这对他的例子有效,但显然不是。