OrderedDict 在本地工作,但不在使用 Heroku 和 Flask 的 Messenger 聊天机器人中

OrderedDict working locally, but not in Messenger chatbot using Heroku and Flask

我有一个这样的 OrderedDict:

od = OrderedDict({
                'a':{'1-k1':'v1',
                     '2-k2':'v2',
                     '3-k3':'v3',
                     },
                'b':{'4-k4':'v4'},
                    {'5-k5':'v5'},
                    {'6-k6':'v6'},
                })

我想得到一个二级词典中所有键的列表,所以我做了:

aod = OrderedDict(od.get('a'))
a_message = ''
for a_key in list(aod.keys()):
    a_message = amessage + a_key + ' \n'  
print (a_message)

事情是这样的,当我在本地脚本中 运行 时,它输出:

"
1-k1
2-k2
3-k3
"

但是,当我使用 Heroku 将它集成到我的 Messenger Chatbot 中时,该列表没有按顺序排列。我认为应用程序脚本中可能有一些干扰,所以我将那段代码放在顶部并在完成后立即打印它,它仍然是无序的。我也试过让内部词典也订购。

那么什么会导致在本地工作的 OrderedDict 列表在部署后变得无序?

在您的本地计算机中进行排序纯属偶然。嵌套字典是普通字典,排序的想法不适用。

您需要创建 OrderedDict 的嵌套字典实例以获得您想要的顺序:

od = OrderedDict([
                ('a': OrderedDict(...)),
                ...
                ])

你应该改变数据结构,而不是在字典上调用 OrderedDict,因为那不能保证你想要的顺序

我实际上是通过将字典转换为元组列表来解决这个问题的。看起来字典没有存储订单,即使我调用了 OrderedDict。 我的字典现在看起来像这样:

`od = OrderedDict([('a',OrderedDict([
                     ('1-k1','v1'),
                     ('2-k2','v2'),
                     ('3-k3','v3'),
                     ]))

 ])`