Joh*_*Doe 0 python dictionary list
我需要将字典转换为列表,其中键重复值的次数。
dict = {'foo':3, 'bar':1}
Run Code Online (Sandbox Code Playgroud)
期待结果:
['foo', 'foo', 'foo', 'bar']
Run Code Online (Sandbox Code Playgroud)
使用collections.Counter:
>>> [*Counter(dict).elements()]
['foo', 'foo', 'foo', 'bar']
Run Code Online (Sandbox Code Playgroud)
小基准与所谓更快的解决方案比较,这(和第三解决方案,在做什么Counter呢,而是直接将字典)。数字就是时间,所以更低=更快:
0.31 Counter
0.70 listcomp
0.27 itertools
0.32 Counter
0.72 listcomp
0.28 itertools
0.32 Counter
0.72 listcomp
0.29 itertools
Run Code Online (Sandbox Code Playgroud)
基准代码:
import timeit
from collections import Counter
from itertools import chain, starmap, repeat
data = {i: i % 10 + 1 for i in range(1000)}
solutions = {
'Counter': lambda: [*Counter(data).elements()],
'listcomp': lambda: [v for v, c in data.items() for _ in range(c)],
'itertools': lambda: list(chain.from_iterable(starmap(repeat, data.items())))
}
for _ in range(3):
for name, solution in solutions.items():
t = min(timeit.repeat(solution, number=1000))
print('%.2f' % t, name)
print()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
105 次 |
| 最近记录: |