Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python OrderedDict在本地工作,但不在Messenger聊天机器人中使用Heroku和Flask_Python_Heroku_Facebook Messenger Bot - Fatal编程技术网

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
,因为这不能保证你想要的订单。