如何通过defaultdict(列表)键(按字母顺序)用于倒排索引订购(How to order b

2019-10-19 01:33发布

我有一个倒排索引。 它由我的字词典,其中的条款显示上传文件列表。 我只是想为排序我的字典按字母顺序排列。 这是它的外观现在(例如):

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']

第一打印通话提供了单词的完美排序列表,但如果我试着去理解单词“所有”的连接postinglist,我收到此错误信息:

TypeError: list indices must be integers, not str

Answer 1:

调用sorted()在一本字典的回报只是在排序顺序按键的列表。 字典本身没有内在的顺序,你不能排序的。

因为你重新分配的输出sorted()返回到self.index ,你现在已经失去了你参考原defaultdict



Answer 2:

我不相信,字典可以在你指的是感进行排序。 如果你想查看你排序可以尝试以下字典:

sorted(self.index.items())

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



Answer 3:

我读这昨天,我认为这可能是你要找的。 它是一种二进制堆实现的Python字典。 它提出了其在项目排序顺序,如果调用了它。

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



文章来源: How to order by key (alphabetically) in defaultdict(list) for an inverted index