1

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

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
4

3 回答 3

3

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

因为您将 back 的输出重新分配sorted()self.index,所以您现在失去了对原始 的引用defaultdict

于 2013-11-24T14:39:13.473 回答
2

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

sorted(self.index.items())

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

于 2013-11-24T14:44:12.163 回答
1

我昨天读了这篇文章,我想它可能正是你想要的。它是 Python 字典的二进制堆实现。如果您调用它,它会按排序顺序排列其项目。

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

于 2013-11-24T15:34:52.010 回答