在Python中对多维数组中的列表顺序排序

时间:2014-03-23 15:38:58

标签: python arrays sorting multidimensional-array

我想用Python转换这些数据(按字母顺序排序):

test = [['ma', 'e', 'wa', 'ka'], ['ma', 'haa', 'laa'], ['ma', 'ka', 'm', 'haa', 'laa', 'ca', 'j', 'ra'], ['ma', 'ra'], 'ma']

进入一个多维数组,其项目按每个列表中的项目数量排序,如下所示:

test = ['ma', ['ma', 'ra'], ['ma', 'haa', 'laa'], ['ma', 'e', 'wa', 'ka'], ['ma', 'ka', 'm', 'haa', 'laa', 'ca', 'j', 'ra']]

如果你只是查看长度,我希望它从[4,3,8,2,1]到[1,2,3,4,8],但我不一定要解决方案特定于此示例。

2 个答案:

答案 0 :(得分:4)

test = sorted(test, key=lambda x: len(x) if type(x)==list else 1)

我试过了:

>>> test = [['ma', 'e', 'wa', 'ka'], ['ma', 'haa', 'laa'], ['ma', 'ka', 'm', 'haa', 'laa', 'ca', 'j', 'ra'], ['ma', 'ra'], 'ma']
>>> test = sorted(test, key=lambda x: len(x) if type(x)==list else 1)
>>> test
['ma', ['ma', 'ra'], ['ma', 'haa', 'laa'], ['ma', 'e', 'wa', 'ka'], ['ma', 'ka', 'm', 'haa', 'laa', 'ca', 'j', 'ra']]

唯一奇怪的是,并非原始列表中的所有元素都是列表,包括字符串和列表,这就是为什么我必须添加条件如果type(x)== list else 1

答案 1 :(得分:1)

一个解决方案:

sorted(test, key=lambda x: isinstance(x,list) and len(x) or 1)