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