1

次のかなり複雑なデータ構造があります。

temp_dict = {
    'a': {
        'aardvark': (6,True),
        'apple': (3,True)
    },
    'b':{
        'banana': (2,False),
        'bobble': (8,True)
    }
}
print(temp_dict['a'])

タプルを含む別の辞書 (aardvark、apple) を含む別の辞書レイヤー (a、b) を含む辞書 (temp_dict) です。

しかし、これは次のように出力します: {'apple': (3, True), 'aardvark': (6, True)}

a,b の順序は気にしませんaardvark, appleしかし、レイヤーをorderedDictにする必要があります-挿入された順序を覚えておく必要があります(ソートされることはありません)。だから私は試しました:

temp_dict = {
    'a': OrderedDict{
        'aardvark': (6,True),
        'apple': (3,True)
    },
    'b':OrderedDict{
        'banana': (2,False),
        'bobble': (8,True)
    }
}

しかし、それは私に無効な構文を与えるだけです。どうすればいいですか?私が見つけた例のどれも、別のデータ構造内での OrderedDict の宣言を示していません。

ありがとう

4

2 に答える 2

4

試す:

temp_dict = {
    'a': OrderedDict([
        ('aardvark', (6,True)),
        ('apple', (3,True)),
    ]),
    'b':OrderedDict([
        ('banana', (2,False)),
        ('bobble', (8,True)),
    ]),
}
于 2013-12-26T14:08:02.960 に答える
2

これを行う:

temp_dict = {
    'a': OrderedDict((
        ('aardvark', (6,True)),
        ('apple', (3,True))
    )),
    'b':OrderedDict((
        ('banana', (2,False)),
        ('bobble', (8,True))
    ))
}

(ただし、クラスを使用するように切り替えることも検討してください。ネストの層が複数ある辞書は、通常、問題に対する間違ったアプローチであることがわかりました。)

をディクショナリで初期化すると、初期化OrderedDictに挿入順序が保持されることが保証されます。

>>> d = OrderedDict({1: 2, 3: 4})
>>> d[5] = 6

dOrderedDict([(1, 2), (3, 4), (5, 6)])またはのいずれかである必要がありますOrderedDict([(3, 4), (1, 2), (5, 6)])

一方で:

>>> d = OrderedDict([(1, 2), (3, 4)])
>>> d[5] = 6

dできるのは今だけOrderedDict([(1, 2), (3, 4), (5, 6)])です。

于 2013-12-26T14:07:17.193 に答える