当前位置: 首页 > 知识库问答 >
问题:

如何在defaultdict(list)中按键(字母顺序)对反向索引排序

端木令
2023-03-14

我有一个倒排索引。它由我的单词词典和出现术语的文档发布列表组成。我只想按字母顺序对我的词典进行排序。这是它现在的样子(示例):

self.index = 
defaultdict(<type 'list'>, {
'all': [['d03', array('I', [32L, 40L)], ['d07', array('I', [32L, 40L, 47L])], ['d05', array('I', [32L, 40L, 47L])]],
'just': [['d03', array('I', [11L])], ['d07', array('I', [11L])], ['d05', array('I', [11L])], ['d08', array('I', [11L])]])
'collect': [['d04', array('I', [24L])]]
'occurring': [['d03', array('I', [34L])], ['d07', array('I', [34L])]

...等等,这就是排序后的样子:

'all': [['d03', array('I', [32L, 40L)], ['d07', array('I', [32L, 40L, 47L])], ['d05', array('I', [32L, 40L, 47L])]],
'collect': [['d04', array('I', [24L])]]
'just': [['d03', array('I', [11L])], ['d07', array('I', [11L])], ['d05', array('I', [11L])], ['d08', array('I', [11L])]])
'occurring': [['d03', array('I', [34L])], ['d07', array('I', [34L])]

我尝试的内容:

self.index = sorted(self.index)
print self.index
print self.index['all']

第一次打印调用提供了一个完美的单词排序列表,但如果我尝试获取单词“all”的已连接帖子列表,我会收到以下错误消息:

TypeError: list indices must be integers, not str

共有3个答案

微生嘉
2023-03-14

我昨天读到这篇文章,我想这可能正是你想要的。它是Python字典的二进制堆实现。如果你打电话给它,它会按顺序把它的项目放出来。

http://code.activestate.com/recipes/117228-priority-dictionary/

晏昀
2023-03-14

我不相信字典可以按你所指的意义进行分类。如果要查看已排序的词典,可以尝试以下操作:

sorted(self.index.items())

但是请注意,结果不是一个字典-它只是一个(键,值)元组列表,这些元组将在原始字典中相互关联。

顾嘉良
2023-03-14

对字典调用sorted(),只会返回按排序顺序排列的键列表。词典本身没有固有的顺序,你不能对它们进行排序。

因为您将sorted()的输出重新分配回self.index,所以您现在已经丢失了对原始defaultcript的引用。

 类似资料:
  • 问题内容: 如何获得按字段排序的struct输出? 问题答案: A 是字段的 有序 集合。该包使用反射来获取值的字段和值,并按照定义它们的顺序生成输出。 因此,最简单的解决方案是在已经按字母顺序排列字段的位置声明类型: 如果您不能修改字段的顺序(例如,内存布局很重要),则可以通过为结构类型指定一个方法来实现接口: 所述包检查所传递的值工具,并且如果是的话,调用它的方法,以产生输出。 该解决方案的缺

  • 问题内容: 有没有一种简单的方法可以在Python中按字母顺序对字符串中的字母进行排序? 因此对于: 我想返回: 问题答案: 你可以做:

  • 在 FreeMarker 2.3.23 中,指令名可以使用驼峰样式来代替蛇形样式, 比如 startsWith 代替 starts_with。 但是要知道,在相同模版内,FreeMarker 会强制对模板语言部分的所有标识符使用驼峰样式 (用户自定义名称不会受影响)。 abs ancestors api boolean byte c for strings, for booleans cap_fi

  • $ ${...},  插值 # #,  总体结构, 指令 #{...},  #{...}: 数字插值 < <#...>,  指令 <#--...-->,  总体结构 A ABC,  lower_abc, upper_abc abs built-in,  abs absolute value,  abs acquisition,  使用获得机制 adding hashes,  连接 adding s

  • 问题内容: 我是Java的新手,正在尝试按字母顺序排列术语的arrayList。(一个术语定义为一个字符和一个整数)(例如 我的代码如下: 为什么这不起作用?以及我该如何完成呢?我的arrayList称为术语,填充有Term类型 问题答案: 您在这行代码中遇到的问题。您的课程不是So 的类型,这两个对象将基于哪个属性或条件方法? 您必须使您的类为Comparable类型。和,根据您的需要覆盖该方法