如何将字典转换为 python 中的重复列表?
例如:{'a':1,'b':2,'c':1,'d':3}
到['a','b','b','c','d','d','d']
如何将字典转换为 python 中的重复列表?
例如:{'a':1,'b':2,'c':1,'d':3}
到['a','b','b','c','d','d','d']
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']
您可以将其作为嵌套列表推导:
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']
使用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>
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]]