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'),
]))
])`
我有一个这样的 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'),
]))
])`