Python OrderedDict在本地工作,但不在Messenger聊天机器人中使用Heroku和Flask
我有一个这样的订单:Python OrderedDict在本地工作,但不在Messenger聊天机器人中使用Heroku和Flask,python,heroku,facebook-messenger-bot,Python,Heroku,Facebook Messenger Bot,我有一个这样的订单: od = OrderedDict({ 'a':{'1-k1':'v1', '2-k2':'v2', '3-k3':'v3', }, 'b':{'4-k4':'v4'}, {'5-k5':'v5'}, {'6-
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聊天机器人中时,列表并不符合顺序。我认为应用程序脚本中可能存在干扰,所以我将该代码块放在顶部,并在它完成后立即打印出来,但它仍然是无序的。我还试着把内部字典也整理好
那么,是什么导致本地工作的OrderedICT列表在部署后变得无序呢 本地机器上的订购只是偶然的。嵌套的dict是普通dict,排序的思想不适用 您需要创建OrderedDict的嵌套dicts实例以获得所需的排序:
od = OrderedDict([
('a': OrderedDict(...)),
...
])
您应该更改数据结构,不要在字典上调用
OrderedDict
,因为这不能保证您想要的顺序我实际上通过将字典转换为元组列表来解决这个问题。尽管我打电话给OrderedDict,但字典似乎没有存储订单。
我的口述现在看起来像这样:
`od = OrderedDict([('a',OrderedDict([
('1-k1','v1'),
('2-k2','v2'),
('3-k3','v3'),
]))
])`
我也试过了,但仍然不起作用,我也运行过很多次,所以这可能不是巧合。Heroku应用程序的输出是OrderedDict,但其内容的顺序与本地脚本不同。@MohamedMohey您应该更改数据结构,不要在字典上调用
OrderedDict
,因为这不能保证你想要的订单。