5

OrderedDictをネストする方法は?

私は試した:

table=collections.OrderedDict()
table['E']['a']='abc'

しかし、これはエラーを示しています。

私も試しました:

table=collections.OrderedDict(OrderedDict())
table['E']['a']='abc'

これもエラーを示しています。

私は試した:

table=collections.OrderedDict()
table['E']=collections.OrderedDict()
table['E']['a']='abc'

これはうまくいきます。

私のコーディングでは、次のように使用する必要がありました:

table=collections.OrderedDict()
for lhs in left:
    table[lhs]=collections.OrderedDict()
    for val in terminal:
        table[lhs][val]=0

これは正常に動作します。しかし、他の方法はありますか。私が読んだように、Pythonはそのデータ構造を自動的に管理します。

とにかく、それがどれだけネストされるか、およびそのネストのデータ構造が1行でどうなるかとともに、辞書を宣言することはありますか。

辞書を宣言するためだけに余分なループを使用すると、Pythonで何かが欠けているように感じます。

4

3 に答える 3

5

本当に1行でやりたいのなら、これでうまくいくでしょう

table = collections.OrderedDict([(lhs, collections.OrderedDict(zip(terminal, [0] * len(terminal)))) for lhs in left])

あなたは(特に端末に多くのメンバーがいる場合)最善の方法です

zipped = zip(terminal, [0] * len(terminal))
table = collections.OrderedDict([(lhs, collections.OrderedDict(zipped)) for lhs in left])
于 2013-09-15T06:33:34.737 に答える