[英]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.