xs = [
[1,2,3,4],
[5,6,7,8],
[9,0,0,1],
[2,3],
[0],
[5,8,3,2,5,1],
[6,4],
[1,6,9,9,2,9]
]
""" expected output:
xs_dict = {
1: [[0]]
2: [[2,3],[6,4]]
4: [[1,2,3,4],[5,6,7,8],[9,0,0,1]]
6: [[5,8,3,2,5,1],[1,6,9,9,2,9]]
}
"""
我可以做到这一点,例如,通过
xs_dict = {}
for x in xs:
aux = xs_dict.get(len(x),[])
aux.append(x)
xs_dict[len(x)] = aux
print(xs_dict)
但我不禁觉得应该有一种更 pythonic 的方式来实现这一目标。
这是什么?
最佳答案
from itertools import groupby
xs_dict = {
key: list(value)
for (key, value) in groupby(sorted(xs, key=len), len)
}
正如下面评论中所讨论的,对输入进行必要的排序是一个不必要的步骤。对于大输入,这将比必要的方式减慢该算法的速度。然后考虑使用@hiroprotagonist 的解决方案,或者将 groupby(sorted(…), …)
替换为可以处理未排序输入的 groupby()
。
关于将列表列表拆分为长度键控字典的 pythonic 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43932593/