上次更改值时,Python排序字​​典

时间:2015-05-05 08:37:39

标签: python sorting dictionary

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

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

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

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

2 个答案:

答案 0 :(得分:4)

Python中的

dict 未排序 - 键不会以任何特定顺序出现。

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

答案 1 :(得分:0)

您可以结帐RevisionDict。它会记住按键更新时的顺序(与OrderedDict相反,OrderedDict记住按键插入时的顺序)。 RevisionDict的界面与dict 100%兼容。

>>> 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)])

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