列表到每个键有多个值的字典转换
我有一个Python列表,其中包含键/值对:
`l=[ [1, 'A'], [1, 'B'], [2, 'C'] ]`
我想将列表转换为字典,其中每个键的多个值将聚合到一个元组中:
{ 1:(‘A’, ‘B’), 2:(‘C’,) }
迭代解决方案是微不足道的:
`l=[ [1, 'A'], [1, 'B'], [2, 'C'] ]
d={}
for pair in l:
if d.has_key(pair[0]):
d[pair[0]]=d[pair[0]]+tuple(pair[1])
else:
d[pair[0]]=tuple(pair[1])
print d
{1: ('A', 'B'), 2: ('C',)}`
是否有更优雅的Pythonic解决方案来完成这项任务?
最佳答案
from collections import defaultdict
d1 = defaultdict(list)
for k, v in l:
d1[k].append(v)
d = dict((k, tuple(v)) for k, v in d1.iteritems())
d现在包含{1:(‘A’,’B’),2:(‘C’,)}
d1是一个临时的defaultdict,列表为值,将在最后一行转换为元组.这样,您将附加到列表,而不是在主循环中重新创建元组.