繁体   English   中英

如何通过defaultdict(list)中的键(按字母顺序)排序以获取反向索引

[英]How to order by key (alphabetically) in defaultdict(list) for an inverted index

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

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

在字典上调用sorted()只会返回排序后的列表。 字典本身没有固有的顺序,您不能对它们进行排序。

由于您已将sorted()的输出重新分配回self.index ,因此您现在失去了对原始defaultdict引用。

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

sorted(self.index.items())

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

我昨天读过这篇文章,我认为这可能正是您要寻找的。 它是Python字典的Binary Heap实现。 如果您调用它,它会按排序顺序显示其项目。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM