列表到每个键有多个值的字典转换

列表到每个键有多个值的字典转换


我有一个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,列表为值,将在最后一行转换为元组.这样,您将附加到列表,而不是在主循环中重新创建元组.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值