2017-05-04 33 views
0

我有一個這樣的OrderedDict在本地工作,但不是在Messenger的聊天機器人:OrderedDict使用的Heroku和瓶

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中時,該列表並不按順序排列。我認爲應用程序腳本中可能存在某些干擾,因此我將該代碼塊放在頂部並在完成後立即將其打印出來,但仍然無序。我也嘗試製作內部字典Ordered too。

那麼什麼會導致OrderedDict列表在本地工作,在部署後無序?

回答

1

您的本地機器的排序僅僅是偶然。嵌套的字典是香草字典,排序的想法是不適用的。

你需要讓OrderedDict的嵌套類型的字典實例,以獲得您想要的順序:

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

你應該改變的數據結構,並在字典不叫OrderedDict,爲不保證順序你想要

+0

我想這也和它仍然無法工作,我也跑了很多次,所以它可能不是巧合。 –

+0

Heroku應用程序的輸出是OrderedDict,但其內容不像本地腳本那樣排序。 –

+0

@MohamedMohey你應該改變數據結構,不要在字典上調用'OrderedDict',因爲這不能保證你想要的順序。 –

-1

我實際上通過將字典轉換爲元組列表來解決這個問題。即使我叫OrderedDict,看起來字典並沒有存儲順序。 我的字典,現在看起來是這樣的:

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

])`