按层次排列列表

2024-09-28 03:17:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一张单子

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

我怎么走?你知道吗


Tags: new排序单子usyorkchinaindianorth
1条回答
网友
1楼 · 发布于 2024-09-28 03:17:34

构建反映结构的键;按逗号和反转拆分:

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

相关问题 更多 >

    热门问题