我有以下列表:
["stephane", "philippe", "hélène", ["hugo", "jean-michel", "fernand"], "gustave"]
我想这样订购:
["gustave", "hélène", ["fernand", "hugo", "jean-michel"], "philippe", "stephane"]
注意:如果用户后面有嵌套列表,则此列表必须位于此用户的右侧。
除此之外,所有嵌套列表的工作方式相同。它是递归的。
答案 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的提议非常好。