如何在python中将字典转换为重复列表?
例如:{'a':1,'b':2,'c':1,'d':3}
到['a','b','b','c','d','d','d']
答案 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)这种对的列表。