无法访问OrderedDict中的子键

时间:2016-10-03 21:42:25

标签: python ordereddictionary

我正在尝试将我的普通字典定义为OrderedDict,但我似乎无法访问密钥是内层。

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

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

我可以针对这两种情况访问['key1'],但我无法访问['key1']['subkey1']订购的字典。

我做错了什么?

2 个答案:

答案 0 :(得分:1)

带有'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

答案 1 :(得分:0)

如果您希望内部级别也是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