python嵌套字典:来自集合的OrderedDict

Rat*_*Don 4 python dictionary nested

如何嵌套OrderedDict?

我试过了:

table=collections.OrderedDict()
table['E']['a']='abc'
Run Code Online (Sandbox Code Playgroud)

但这显示错误.

我也尝试过:

table=collections.OrderedDict(OrderedDict())
table['E']['a']='abc'
Run Code Online (Sandbox Code Playgroud)

这也显示错误.

我试过了:

table=collections.OrderedDict()
table['E']=collections.OrderedDict()
table['E']['a']='abc'
Run Code Online (Sandbox Code Playgroud)

这很好用.

在我的编码中我必须使用这样的:

table=collections.OrderedDict()
for lhs in left:
    table[lhs]=collections.OrderedDict()
    for val in terminal:
        table[lhs][val]=0
Run Code Online (Sandbox Code Playgroud)

哪个工作正常.但有没有其他方法.因为我读了python自动管理它的数据结构.

无论如何都要声明一本字典以及它的嵌套数量以及它的嵌套数据结构在一行中是什么.

使用额外的循环只是为了声明字典感觉我在python中缺少一些东西.

Ash*_*ary 10

您可以定义自己的自定义子类OrderedDict,处理__missing__支持无限嵌套的方法.

from collections import OrderedDict

class MyDict(OrderedDict):
    def __missing__(self, key):
        val = self[key] = MyDict()
        return val
Run Code Online (Sandbox Code Playgroud)

演示:

>>> d = MyDict()
>>> d['b']['c']['e'] = 100
>>> d['a']['c']['e'] = 100
>>> d.keys()
['b', 'a']
>>> d['a']['d']['e'] = 100
>>> d['a'].keys()
['c', 'd']
Run Code Online (Sandbox Code Playgroud)

  • 当我问这个问题时,我不太了解课堂概念。现在,当我回头看时,您的答案会更好,更复杂。正如我所说的,Pythonic的方式来做到这一点。感谢您的回答。 (2认同)

sbe*_*rry 5

如果您真的想在一行中完成,那么这将起作用

table = collections.OrderedDict([(lhs, collections.OrderedDict(zip(terminal, [0] * len(terminal)))) for lhs in left])
Run Code Online (Sandbox Code Playgroud)

你最好(特别是如果终端有很多成员)做

zipped = zip(terminal, [0] * len(terminal))
table = collections.OrderedDict([(lhs, collections.OrderedDict(zipped)) for lhs in left])
Run Code Online (Sandbox Code Playgroud)