2

次のリストがあります。

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

そして、私はそれを次のように注文したいと思います:

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

注意: ユーザーの後にネストされたリストがある場合、このリストはこのユーザーの右側に配置する必要があります。

それに加えて、ネストされたリストはすべて同じように機能します。再帰的です。

4

2 に答える 2

6

あなたのデータは、辞書としてより適切に表現されるように思えます。連続する要素が特別な関係にあるリストは奇妙に聞こえます。

代わりに、次のようにデータを表現した場合:

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

次に、辞書のキーを並べ替えて、必要な順序を取得できます。

于 2011-09-12T13:23:38.560 に答える
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']

私はそれを徹底的にテストしていませんが、それは出発点です。リストをデータ構造として解こうとしていたのですが、再帰関数を入れ子にしてしまい、醜くなりすぎてしまいました…ネッドの提案は本当に良かったです。

于 2011-09-12T14:16:01.367 に答える