2011-09-12 6 views
2

에서 주문 중첩 된 목록 나는 다음과 같은 목록을 가지고 :파이썬 - 알파벳 방법

["stephane", "philippe", "hélène", ["hugo", "jean-michel", "fernand"], "gustave"] 

그리고 나는 이런 식으로 주문하고 싶습니다 :

["gustave", "hélène", ["fernand", "hugo", "jean-michel"], "philippe", "stephane"] 

NB : 다음 중첩 된 목록이있는 경우 이 목록은이 사용자의 오른쪽에 있어야합니다.

모든 중첩 목록은 동일한 방식으로 작동합니다. 재귀 적입니다.

답변

2

:

d = { 
    "stephane": {}, 
    "philippe": {}, 
    "helene": { 
     "hugo": {}, 
     "jean-michel": {}, 
     "fernand": {}, 
    }, 
    "gustave": {}, 
} 

def sort_dict_as_list(d): 
    sorted_list = [] 
    for k, v in sorted(d.items()): 
     if k:  
      sorted_list.append(k) 
     if v: 
      sorted_list.append(v) 
    return sorted_list 

def sort_recursive(d): 
    if d: 
     for k, v in d.items(): 
      d[k] = sort_recursive(v) 
     return sort_dict_as_list(d) 
    else: 
     return d 

if __name__ == "__main__": 
    print sort_recursive(d) 

출력

python sortit.py 
['gustave', 'helene', ['fernand', 'hugo', 'jean-michel'], 'philippe', 'stephane'] 

나는 그것을 철저하게 테스트하지 않은,하지만 그것은 출발점입니다. 나는 그것을 데이터 구조로서리스트로 풀려고했지만 재귀 함수를 중첩시켜 버렸고 너무 추악했다 ... 네드의 제안은 정말 좋았다.

+0

OP는 이미 그 목록을 소비 재귀 코드를 가지고있는 것 같아요. 나는 그 (것)들을 줄곧 dicts로 지키고 정렬 된 순서로 그들을 소비 할 것이다. BTW, 그 목적이 꽤 디버깅이라면, pprint 모듈은 dicts를 재귀 적으로 정렬합니다. –

+0

감사합니다. 확인해 보겠습니다. – wleao

6

데이터가 사전처럼 표현되는 것이 좋습니다. 연속적인 요소가 특별한 관계가있는 소리가 이상한 목록을 나열합니다.

{ 
    "stephane": {}, 
    "philippe": {}, 
    "hélène": { 
    "hugo": {}, 
    "jean-michel": {}, 
    "fernand": {}, 
    }, 
    "gustave": {}, 
} 

그런 다음 당신은 단순히 당신이 원하는 순서를 얻기 위해 사전의 키를 정렬 할 수 있습니다

는 대신 이런 데이터를 표현합니다. 나는 네드의 제안을 사용하고이 함께했다 한

+0

나를 괴롭힌다. Acti67이 합리적으로 최근의 Python 버전에 있다면, 그는 ['OrderedDict'] (http://docs.python.org/library/collections.html#collections .OrderedDict). –

+3

@Tim 나는 알고 있다고 생각하지만 그렇지 않은 사람은 OrderedDict가 _ 정렬되어 _ 있지 않다. 정렬하려면 정렬 된 순서로 키 - 값 쌍을 추가해야합니다. –

+0

+1 좋은, beautifuly 문제를 해결 – wleao