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 无法排序)?
dictPython 中的 s 是未排序的- 键不以任何特定顺序出现。
考虑使用collections.OrderedDict标准库中的 。OrderedDict使您的项目按插入时间排序(即根据项目添加到 dict 的顺序)。
更新:如果您使用的是 Python 3.6+,现在字典按插入顺序排序。这种行为在 Python 3.7+ 中得到保证(在 Python 3.6 中,这是正确的,因为解释器是这样构建的)。