按时间对字典中的字典进行排序的最有效方法是啥(对于评论树)?

Posted

技术标签:

【中文标题】按时间对字典中的字典进行排序的最有效方法是啥(对于评论树)?【英文标题】:What is the most efficient way to sort dictionaries inside of dictionaries by time (for a comment tree)?按时间对字典中的字典进行排序的最有效方法是什么(对于评论树)? 【发布时间】:2012-08-08 03:37:54 【问题描述】:

我正在尝试对具有如下结构的评论树进行排序:

unsorted_dict = 
  1: [id, poster, time, comment, 
    2: [id, poster, time, comment, 
      3: [id, poster, time, comment]
    ]
  ],
  2: [id, poster, time, comment, 
      2: [id, poster, time, comment, 
        3: [id, poster, time, comment]
      ]
  ]

如果sort = newest,我想生成一个与上述结构相同但每个级别按时间降序排序的排序列表/字典:

sorted_output = [
                 [1,'toplevel', 10:00pm, 'words...', [
                    [2,'secondlevel', 5:00pm, 'words...',
                       [3,'thirdlevel', '3:00pm', 'comment...'],
                       [4,'thirdlevel', '2:00am','comment']
                    ],
                    [5,'secondlevel', 4:00pm, 'words...', [
                       [6,'thirdlevel', '3:00pm', 'comment...'],
                       [7,'thirdlevel', '2:00pm','comment'],
                       [8,'thirdlevel', '1:00pm','comment']
                    ]
                  ],
                  [9,'toplevel', 9:00pm, 'words...', [
                    [10,'secondlevel', 7:00pm, 'words...',
                       [11,'thirdlevel', '4:00pm', 'comment...'],
                       [12,'thirdlevel', '3:00pm','comment']
                    ],
                    [13,'secondlevel', 6:00pm, 'words...', [
                       [14,'thirdlevel', '3:00pm', 'comment...'],
                       [15,'thirdlevel', '2:00pm','comment'],
                       [16,'thirdlevel', '1:00pm','comment']
                    ]
                  ]
                 ]

对字典的每一层进行排序并重建最终排序列表的最有效方法是什么?

注意:树的上限为 3 级

奖励:另外,我想将原始海报 cmets 放置在每个级别的顶部,按时间排序。

任何帮助将不胜感激!

【问题讨论】:

为什么要在同一个列表中存储不同类型(语义)的数据?依靠一致的列表索引来存储不同的数据有点容易搞砸。我会推荐字典,比如id:1, poster:"someone", time:"1:00pm", comment:"words", replies:[..., ...] 另外,我不确定您在奖金中寻找什么。这些 cmets 会去哪里?如何识别? 原始字典中的键代表什么吗? 是的,原始字典中的键是***父母的 id。因此,在处理查询以构建 unsorted_list 时,我可以将查询条目添加到 parent_dict[parent_id][child_dict] 重新奖励:如果海报 == 原始海报:排序(op_responses_list,按时间)被添加到找到的任何级别的位置[0],因此它们始终高于“常规”回复,但也按时间排序 【参考方案1】:

你应该能够排序这个把字典变成一个列表,排序,然后递归

def nested_sort(hsh):
    lst = list(hsh.iter_items()) # structure this however you want,e.g., build an object
                                #   with the subhash - [1,name, etc. ]
    lst.sort()
    new_lst = []
    for sub_hsh in lst:  # get the subhash out however you structure it above
        new_lst += nested_sort(sub_hsh);  # recurse

【讨论】:

以上是关于按时间对字典中的字典进行排序的最有效方法是啥(对于评论树)?的主要内容,如果未能解决你的问题,请参考以下文章

如何按字典中的值对字典列表进行排序? [复制]

通过 JavaScript 对 HTML 表格进行排序的最有效方法是啥?

按字典顺序对c ++中的多维向量进行排序

如何按日期对字典数组进行排序?

在 Pandas 中将字典转换为对称/距离矩阵的最有效方法

按字典的值对字典进行排序