Python - 按字母顺序排列嵌套列表

时间:2011-09-12 13:14:35

标签: python list nested alphabetical sorted

我有以下列表:

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

我想这样订购:

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

注意:如果用户后面有嵌套列表,则此列表必须位于此用户的右侧。

除此之外,所有嵌套列表的工作方式相同。它是递归的。

2 个答案:

答案 0 :(得分:6)

您的数据听起来更像是字典。连续元素具有特殊关系的列表听起来很奇怪。

如果您改为代表您的数据:

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

然后你可以简单地对词典的键进行排序,以获得你想要的顺序。

答案 1 :(得分:2)

我已经使用了Ned的提议并想出了这个:

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

我没有彻底测试过,但这是一个起点。我试图用列表作为数据结构解决它,但我最终嵌套了递归函数,这太丑了...... Ned的提议非常好。