关于排序:上次更改值时Python排序字典

Python sort dict by last time changing value

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

1
2
3
4
def get_messages(self):
   """select query"""
    messages = self.model.load(['or', ('sender', self.my_id), ('receiver', self.my_id)])
    return messages

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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

在这里,我正在准备dict,其中key是与我交谈的用户。
问题出现了。
这是消息序列的屏幕截图。
enter image description here
我希望dict键序列将按添加到值列表的最后一条消息进行序列排序。
在这里,我没有对它进行排序,实际上有一个问题(我无法理解的问题) - 默认的键序列应该是1, 4, 222595, 99但是程序认为是99, 1, 222595, 4(我检查了get_messages func return 消息按正确顺序排列。

主要问题
如何在上次更改值时对dict键进行排序(或者排序后才能知道dict无法排序)?


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

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


你可以结帐RevisionDict。 它会记住更新密钥时的顺序(与插入密钥时记住顺序的OrderedDict相反)。 RevisionDict的接口与dict 100%兼容。

1
2
3
4
5
6
7
8
9
10
>>> d['a']=0; d['b']=1; d['c']=2  # make three updates
>>> d
RevisionDict([_Item(key='a', value=0, revision=1),
              _Item(key='b', value=1, revision=2),
              _Item(key='c', value=2, revision=3)])
>>> d['a']=3                      # update value of 'b' (was 2 before)
>>> d
RevisionDict([_Item(key='b', value=1, revision=2),
              _Item(key='c', value=2, revision=3),
              _Item(key='a', value=3, revision=4)])

披露:我是该图书馆的作者。