根据层次结构排序列表

时间:2013-11-29 10:24:04

标签: 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"]

我希望它以所有leaf和parent节点组合在一起的方式进行排序。例如: -

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

我该怎么办?

1 个答案:

答案 0 :(得分:2)

构建反映结构的密钥;用逗号分隔并反转:

sorted(a, key=lambda p: map(str.strip, p.split(',')[::-1]))

这会按字母顺序对最后一个组件进行排序,然后对于同一个区域,按字母顺序对国家/地区进行排序等。需要str.strip映射来删除多余的空格。

演示:

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