Python 如何对词典列表进行排序?

Python 如何对词典列表进行排序?,python,list,sorting,dictionary,Python,List,Sorting,Dictionary,我是python新手,正在做一项任务来实现莱阳全局快照算法。我想订一份邮件清单。 我根据用户输入制作了一个字典,但现在我想对每个进程进行迭代,并根据MSG发送的时间对其进行排序 我的字典结构是: defaultdict(<class 'list'>, { 1: [ {10: {'color': 'w', 'data': 4, 'receiver': 2, 'msgId': 'N3FAVSNZGQP0'}}, {1: {'color': 'w', 'da

我是python新手,正在做一项任务来实现莱阳全局快照算法。我想订一份邮件清单。 我根据用户输入制作了一个字典,但现在我想对每个进程进行迭代,并根据MSG发送的时间对其进行排序

我的字典结构是:

defaultdict(<class 'list'>, 
{
  1: [
      {10: {'color': 'w', 'data': 4, 'receiver': 2, 'msgId': 'N3FAVSNZGQP0'}}, 
      {1: {'color': 'w', 'data': 10, 'receiver': 2, 'msgId': '38BRJ7PPE42V'}}
  ]
  2: [
      {30: {'color': 'w', 'data': 50, 'receiver': 1, 'msgId': 'IY09Z5TH4D2G'}}
  ]
})
其他失败的尝试:

for obj in sentMsgs:
    L = sentMsgs[obj]
    msgs = [collections.OrderedDict((k, d[k](v)) for (k, v) in l.items()) for l in L]
消息={
1: [
{10:{'color':'w','data':4',receiver':2',msgId':'N3FAVSNZGQP0'},
{1:{'color':'w','data':10',receiver':2',msgId':'38BRJ7PPE42V'}}
],
2: [
{30:{'color':'w','data':50',receiver':1',msgId':'IY09Z5TH4D2G'}}
]
}
对于消息中的消息:
消息[message].sort(key=lambda x:list(x.keys())[0])
消息={
1: [
{10:{'color':'w','data':4',receiver':2',msgId':'N3FAVSNZGQP0'},
{1:{'color':'w','data':10',receiver':2',msgId':'38BRJ7PPE42V'}}
],
2: [
{30:{'color':'w','data':50',receiver':1',msgId':'IY09Z5TH4D2G'}}
]
}
对于消息中的消息:
消息[message].sort(key=lambda x:list(x.keys())[0])

按关键字对每个列表的DICT进行排序:


按关键字对每个列表的DICT进行排序:


您需要更好的抽象。如果这是一个练习,请继续。但在现实生活中,你应该问问自己,一个对象是否比一本字典更有意义。这对我来说太低级了。为什么不是一本信息词典呢?它是一本信息词典。根索引表示processId,每个进程中都有存储的MSG列表。键是消息发送的时间,值包含该消息的元数据。按键排序就完成了。您需要更好的抽象。如果这是一个练习,请继续。但在现实生活中,你应该问问自己,一个对象是否比一本字典更有意义。这对我来说太低级了。为什么不是一本信息词典呢?它是一本信息词典。根索引表示processId,每个进程中都有存储的MSG列表。键是消息发送的时间,该值包含该消息的元数据。按键排序即可。
for obj in sentMsgs:
    msg = sorted(sentMsgs[obj], key=lambda x:list(x.values()))
    sentMsgs[obj] = msgs
for obj in sentMsgs:
    L = sentMsgs[obj]
    msgs = [collections.OrderedDict((k, d[k](v)) for (k, v) in l.items()) for l in L]
    msgs = collections.OrderedDict(sorted(sentMsgs[obj].items()))
    sentMsgs[obj] = msgs
    msgs = SortedDict(sentMsgs[obj])
    sentMsgs[obj] = msgs
for a in sentMsgs.values():
    a.sort(key=list)