1

我有以下相当复杂的数据结构:

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

它是一个包含另一个字典层 (a,b) 的字典 (temp_dict),它包含另一个包含元组的字典 (aardvark, apple)。

但这输出: {'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))
    ))
}

(但也要考虑切换到使用类。我发现嵌套超过 1 层的字典通常是解决问题的错误方法。)

OrderedDict用字典初始化 an可以保证在初始化之后保持插入顺序。

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

d现在必须是OrderedDict([(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 回答