我有一个清单
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
我该怎么办?
答案 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']