Python按上次更改值对dict进行排序

sas*_*ero 2 python sorting dictionary

我正在为网站编写信使。所以,我有一些函数序列。
首先是

def get_messages(self):
    """select query"""
    messages = self.model.load(['or', ('sender', self.my_id), ('receiver', self.my_id)])
    return messages
Run Code Online (Sandbox Code Playgroud)

返回带有消息的数据库表中的所有记录,其中我是消息的发送者或接收者。
下一个功能是

def get_dialogs(self):
    """returns dialogs of curr user"""
    dialogs = {}
    for msg in self.messages:            
        if msg['receiver'] != self.my_id:
            tmp_d = msg['receiver']
        else:
            tmp_d = msg['sender']

        if tmp_d not in dialogs.keys():
            dialogs[tmp_d] = [msg]
        else:
            dialogs[tmp_d].append(msg)

    return dialogs
Run Code Online (Sandbox Code Playgroud)

在这里,我正在准备 dict,其中 key 是我与之交谈的用户。
问题是开始。
这是消息序列的屏幕截图。 在此处输入图片说明
我希望 dict 键序列将按添加到值列表的最后一条消息进行排序。
在这里,我没有对其进行排序,一个问题实际上是(我无法理解的问题)-默认情况下的键序列应该是1, 4, 222595, 99但程序认为是99, 1, 222595, 4(我检查了get_messagesfunc 以正确的顺序返回消息。

主要问题
如何上次更改值对 dict 键进行排序(或排序 dicti 知道 dict 无法排序)

nne*_*neo 5

dictPython 中的 s 是未排序的- 键不以任何特定顺序出现。

考虑使用collections.OrderedDict标准库中的 。OrderedDict使您的项目按插入时间排序(即根据项目添加到 dict 的顺序)。

更新:如果您使用的是 Python 3.6+,现在字典按插入顺序排序。这种行为在 Python 3.7+ 中得到保证(在 Python 3.6 中,这是正确的,因为解释器是这样构建的)。