我正在为网站写信使。
所以,我有一些功能序列。
首先是
def get_messages(self):
"""select query"""
messages = self.model.load(['or', ('sender', self.my_id), ('receiver', self.my_id)])
return messages
返回数据库表中带有消息的所有记录,我是消息的发送者或接收者。
下一个功能是
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
在这里,我正在准备字典,关键是与我交谈的用户。
那里的问题是开始。
这是消息序列的屏幕截图。
我希望字典键序列将按添加到值列表中的最后一条消息进行排序。
在这里,我没有对其进行排序,实际上是一个问题(我无法理解的问题)-默认情况下,键序列应为1, 4, 222595, 99
,但程序认为是99, 1, 222595, 4
(我检查了get_messages
func return消息按正确顺序排列。
主要问题
如何通过上次更改值对dict键排序(或让dicti知道无法对dict排序)?
python大神给出的解决方案
Python中的dict
未排序-键不会以任何特定顺序出现。
考虑改用标准库中的collections.OrderedDict
。 OrderedDict
使您的项目按插入时间排序(即,根据将项目添加到dict的顺序)。
更新:如果您使用的是Python 3.6以上版本,则字典现在会按照插入顺序进行排序。此行为在Python 3.7+中得到保证(在Python 3.6中,仅因为解释器是通过这种方式构建的,所以它是正确的)。