Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 根据层次结构对列表进行排序_Python_Sorting - Fatal编程技术网

Python 根据层次结构对列表进行排序

Python 根据层次结构对列表进行排序,python,sorting,Python,Sorting,我有一张单子 a = ["Asia/Pacific", "North America", "India,Asia/Pacific", "China, Asia/Pacific", "New Delhi, India, Asia/Pacific", "Bangalore, India,Asia/Pacific", "Shangai, China, Asia/Pacific", "US, North America", "New York, US, North America"] 我希望它能够以

我有一张单子

a = ["Asia/Pacific", "North America", "India,Asia/Pacific", "China, Asia/Pacific", "New Delhi, India, Asia/Pacific", "Bangalore, India,Asia/Pacific",  "Shangai, China, Asia/Pacific", "US, North America", "New York, US, North America"]
我希望它能够以这样的方式进行排序:所有的叶节点和父节点都聚集在一起。例如:-

a = ["Asia/Pacific", "India,Asia/Pacific", "New Delhi, India, Asia/Pacific", "Bangalore, India,Asia/Pacific",  "China, Asia/Pacific", "Shangai, China, Asia/Pacific", "North America", "US, North America", "New York, US, North America"]
更清楚地说,它应该遵循一个树形结构,如-

Asia/Pacific
   India
       Bangalore
            Sarjapur Road
            MG Road
       Mumbai
             Santa Cruz
   China
       Beijing
       Shanghai

North America
   USA
   Canada
   Mexico

我该怎么做?

构建一个反映结构的键;按逗号和反向拆分:

sorted(a, key=lambda p: map(str.strip, p.split(',')[::-1]))
这将按字母顺序对最后一个组件进行排序,然后对同一地区按字母顺序对国家进行排序,等等。需要使用
str.strip
映射来删除多余的空格

演示:


你应该重新设计你的数据结构。嵌套列表或dict,而不是列表中混乱的字符串语法。您刚刚从@NilsWerner获得了最终答案
>>> a = ["Asia/Pacific", "North America", "India,Asia/Pacific", "China, Asia/Pacific", "New Delhi, India, Asia/Pacific", "Bangalore, India,Asia/Pacific",  "Shangai, China, Asia/Pacific", "US, North America", "New York, US, North America"]
>>> sorted(a, key=lambda p: map(str.strip, p.split(',')[::-1]))
['Asia/Pacific', 'China, Asia/Pacific', 'Shangai, China, Asia/Pacific', 'India,Asia/Pacific', 'Bangalore, India,Asia/Pacific', 'New Delhi, India, Asia/Pacific', 'North America', 'US, North America', 'New York, US, North America']