4

如何将字典转换为 python 中的重复列表?

例如:{'a':1,'b':2,'c':1,'d':3}['a','b','b','c','d','d','d']

4

4 回答 4

5

Counter.elements来自集合模块的正是这样做的:

d = {'a':1,'b':2,'c':1,'d':3}
from collections import Counter
print sorted(Counter(d).elements())
# ['a', 'b', 'b', 'c', 'd', 'd', 'd']
于 2013-06-01T00:55:44.630 回答
4

您可以将其作为嵌套列表推导:

d = {'a':1,'b':2,'c':1,'d':3}
d2 = [k for k, v in d.items() for _ in range(v)]
# ['a', 'c', 'b', 'b', 'd', 'd', 'd']

但是,请注意顺序是任意的(因为字典键没有顺序)。如果您希望它按字母顺序排列,请执行

d2 = [k for k, v in sorted(d.items()) for _ in range(v)]
# ['a', 'b', 'b', 'c', 'd', 'd', 'd']
于 2013-06-01T00:49:18.610 回答
0

使用itertools.repeat速度更快。如果D={'a':1,'b':2,'c':1,'d':3}, result=['a','b','b','c','d','d','d'].

from itertools import repeat
result=reduce(lambda la,lb:la+lb,[list(itertools.repeat(k,v)) for k,v in D.items()],[])

一个非常清晰的方法,

from itertools import repeat
result=[]
for k,v in D.items():
    result+=list(repeat(k,v))

附言。

你用的OrderedDict。下面是第一种。reduce有三个,目标是解释你生成计算结果的值,通过最后一个参数[],来不断reduce作为一个结果列表。就是通过items()生成的(key,value)这种对的列表。</p>

于 2013-06-02T08:07:31.027 回答
0
d = {'a':1,'b':2,'c':1,'d':3}
result = [x for k, v in d.items() for x in k * v]

或者,如果您想确保排序顺序:

d = {'a':1,'b':2,'c':1,'d':3}
result = [x for k in sorted(d) for x in k * d[k]]
于 2013-06-01T00:49:43.757 回答