python字典到重复列表

时间:2013-06-01 00:46:52

标签: python list dictionary

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

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

4 个答案:

答案 0 :(得分: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']

答案 1 :(得分: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']

答案 2 :(得分: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]]

答案 3 :(得分: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))

PS。

假设你用的OrderedDict。稍微解释一下第一种。降低有三个参数,目标是把你字典产生的列表中,通过最后一个初始值[],来不断减少为一个结果列表“。你字典产生的列表“就是通过items()生成的(key,value)这种对的列表。