我想在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]但我不一定希望解决方案是特定于这个例子的
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
一个解决方案:
sorted(test, key=lambda x: isinstance(x,list) and len(x) or 1)