无法访问 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
我试图将我的普通字典定义为 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