>>> list(itertools.chain.from_iterable(itertools.repeat(k, v) for k, v in d.items()))
[1, 1, 1, 10, 10, 5, 5, 5, 5, 5, 5]
非常大的字典与使用两个循环的列表理解的时间比较:
>>> d = {i: i for i in range(100)}
>>> %timeit list(itertools.chain.from_iterable(itertools.repeat(k, v) for k, v in d.items()))
10000 loops, best of 3: 55.6 µs per loop
>>> %timeit [k for k, v in d.items() for _ in range(v)]
10000 loops, best of 3: 119 µs per loop
一种方法是使用^{} 将子列表粘合在一起
或者,如果您正在处理一个非常大的字典,那么您可以避免使用^{} 和^{} 构建子列表
非常大的字典与使用两个循环的列表理解的时间比较:
不清楚您是否希望对输出进行排序(示例代码没有对其进行排序),但如果是这样,只需对
d.items()
进行预排序即可您可以使用列表来完成此操作:
收益率:
您可以再次对其排序,以获得您要查找的列表
[k for k,v in d.items() for _ in range(v)]
... 我想如果你想把它分类,你可以这样做
[k for k,v in sorted(d.items()) for _ in range(v)]
相关问题 更多 >
编程相关推荐