无法访问 OrderedDict 中的子键

Cannot access sub-keys in OrderedDict

我试图将我的普通字典定义为 OrderedDict,但我似乎无法访问内层的键。

my_dict = \
{
    'key1':
    {
        'subkey1':value1,
        'subkey2':value2
    }
}

my_ordered_dict = OrderedDict\
([(
    'key1',
    (
        ('subkey1',value1),
        ('subkey2',value2)
    )
)])

对于这两种情况,我都可以访问 ['key1'],但是对于有序的字典,我无法访问 ['key1']['subkey1']

我做错了什么?

带有 'subkey1' 的字典也应该被定义为 OrderedDict ,如果那是你想要的。 所以它应该是这样的

import collections
my_ordered_dict = collections.OrderedDict()
sub_dict=collections.OrderedDict()
sub_dict['subkey1']=1
sub_dict['subkey2']=2
my_ordered_dict['key1']=sub_dict
sub_dict=collections.OrderedDict()
sub_dict['subkey1']=3
sub_dict['subkey2']=4
my_ordered_dict['key2']=sub_dict
print my_ordered_dict['key1']['subkey1']
print my_ordered_dict['key2']['subkey1']

输出将是

1
3

如果您希望内层也是一个 OrderedDict 您需要将其明确定义为一个。由于参数顺序在构造 OrderedDict 时很重要,为了保留它,您需要将键和值作为 key, value 对序列传递,如文档的 OrderedDict Examples and Recipes 部分所示.

将其应用于您的示例意味着您需要执行以下操作:

from collections import OrderedDict

value1, value2 = 42, 69

my_ordered_dict = OrderedDict([
                    ('key1', OrderedDict([
                                ('subkey1', value1),
                                ('subkey2', value2)
                             ])
                    )
                  ])

print(my_ordered_dict['key1']['subkey1'])  # --> 42