2017-05-04 2 views
0

Ich habe eine OrderedDict wie folgt aus:OrderedDict arbeiten lokal, aber nicht in Messenger chatbot mit Heroku und Flask

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

Und ich wollte eine Liste aller Schlüssel in einer der Second-Level-Wörterbücher bekommen, so ich tat:

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

Jetzt hier ist die Sache, wenn ich dies in einem lokalen Skript ausführen, gibt sie:

" 
1-k1 
2-k2 
3-k3 
" 

Aber als ich es mit Heroku in meinen Messenger Chatbot integriert habe, ist die Liste nicht in Ordnung. Ich dachte, dass etwas in das App-Skript eingreifen könnte, also habe ich diesen Code oben eingefügt und direkt nachdem er fertig war, und es war noch nicht geordert. Ich habe auch versucht, die inneren Wörterbücher zu bestellen.

Was würde also dazu führen, dass eine OrderedDict-Liste, die lokal arbeitet, nach der Bereitstellung nicht geordnet wird?

Antwort

1

Die Bestellung in Ihrer lokalen Maschine ist Zufall. Die verschachtelten Dicts sind Vanilla-Dicts, und die Idee der Bestellung ist nicht anwendbar.

Sie müssen die verschachtelten dicts Instanzen von OrderedDict um die Reihenfolge, die Sie wollen:

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

Sie sollten die Datenstruktur ändern, und OrderedDict nicht auf ein Wörterbuch nennen, wie die Bestellung nicht garantieren Sie wollen

+0

habe ich versucht, dies zu, und es wird immer noch nicht funktioniert, ich lief es auch oft, so ist es wahrscheinlich kein Zufall. –

+0

Die Ausgabe der Heroku-App ist ein OrderedDict, aber ihr Inhalt ist nicht wie das lokale Skript sortiert. –

+0

@MohamedMohey Sie sollten die Datenstruktur ändern und 'OrderedDict' nicht in einem Wörterbuch aufrufen, da dies nicht die gewünschte Reihenfolge garantiert. –

-1

Ich löste dies tatsächlich, indem Sie das Wörterbuch in eine Liste von Tupeln umwandeln. Sieht so aus, als ob das Wörterbuch die Reihenfolge nicht gespeichert hat, obwohl ich OrderedDict aufgerufen habe. Mein dict sieht nun wie folgt aus:

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

])` 
Verwandte Themen