Dictionary to List 其中键重复值的次数

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)

sup*_*ain 6

使用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)