Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中创建列表字典的有序字典_Python_Dictionary - Fatal编程技术网

如何在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”这样的键,我认为这是一个例子,并没有试图假设它只适用于两层。他询问了做这件事的“正确方法”,虽然这对他的例子有效,但显然不是。