现有列表的常见用法是在 itertools 中使用 groupby:
from itertools import groupby
flat = ["Shoes", "pants", "shirt", "tie", "jacket", "hat"]
result=[]
for k, g in groupby(sorted(flat, key=len), key=len):
result.append(list(g))
print result
或者,更简洁:
[list(g) for _,g in groupby(sorted(flat, key=len), key=len)]
打印:
[['tie', 'hat'], ['Shoes', 'pants', 'shirt'], ['jacket']]
groupby 的输入根据键功能输出的变化值分组,在本例中为len。一般需要根据相同的key函数对列表进行预排序,所以先调用sorted函数。
如果您的源列表尚未完成,或者无法根据条件排序(或者您只是更喜欢其他选项),请创建一个将您的条件映射到唯一键值的 dict:
groups={}
for e in flat:
groups.setdefault(len(e), []).append(e)
print groups
# {5: ['Shoes', 'pants', 'shirt'], 3: ['tie', 'hat'], 6: ['jacket']}
您也可以使用defaultdict 而不是 setdefault 与任意键值:
from collections import defaultdict
groups=defaultdict(list)
for e in flat:
groups[len(e)].append(e)
# groups=defaultdict(<type 'list'>, {5: ['Shoes', 'pants', 'shirt'], 3: ['tie', 'hat'], 6: ['jacket']})
在任何一种情况下,您都可以从中创建嵌套列表:
>>> [groups[k] for k in sorted(groups.keys())]
[['tie', 'hat'], ['Shoes', 'pants', 'shirt'], ['jacket']]