2013-11-24 3 views
0

역 색인이 있습니다. 내 단어 사전과 용어가 나타나는 문서의 게시 목록으로 구성됩니다. 내가 원하는 것은 사전을 사전 순으로 정렬하는 것입니다.역 색인의 경우 defaultdict (목록)의 키순으로 (알파벳순) 주문하는 방법

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'이라는 단어에 대해 연결된 게시 목록을 얻으려고하면이 오류 메시지가 나타납니다.

사전 반환 정렬 된 순서로 단지 목록 sorted()을 호출 (3210)
TypeError: list indices must be integers, not str 

답변

2

. 사전에는 고유 한 순서가 없으므로 사전을 정렬 할 수 없습니다.

sorted()의 출력을 self.index으로 다시 지정 했으므로 이제 원래 defaultdict에 대한 참조를 잃어 버렸습니다.

+0

옙. IMHO sorted()를 호출하면 데이터 순서를 변경하는 대신 정렬 된 방식으로 결과를 보는 것이 좋습니다. 고마워! – user2618343

2

당신이 말하는 의미에서 사전을 정렬 할 수 있다고 생각하지 않습니다. 당신이 보기하려면 사전은 다음과 같은 시도 할 수 있습니다 분류 :

sorted(self.index.items()) 

참고 그러나 결과는 사전 아니라고 - 각과 연관 될 것입니다 (키, 값) 튜플의 단지 목록 다른 원래 사전에.

+1

이것은 단지'sorted (self.index.items())'입니다 - 키와 값을 압축 할 필요가 없습니다 –

+0

고마워요 존, 그에 따라 내 게시물을 업데이트 :) 잠깐 항목을 잊어 버렸습니다. 흥미롭게도 키 대신 값으로 정렬하려는 경우 zip (self.index.values ​​(), self.index.keys())에 의지해야한다고 생각합니다. –

+0

글쎄, 그건 한 가지 방법입니다 ... 그러나 다른 것은'sorted (self.index.items(), key = lambda L : L [1])'과 같은 정렬 된 키 인수를 제공하는 것입니다 - 그것은 키/값 순서를 유지합니다 ... 그렇지 않으면 결과의 항목을 뒤집어 놓아야합니다. –