列表合并为字典

目标

给定两个列表,将其合并到一个字典中

ids = ['a', 'b', 'a', 'c']
scores=[1, 2, 3, 4]

得到一个字典

ans={'a': [1, 3], 'b': [2],'c': [4]}

采用dict(zip(ids,scores))时,会出现后面元素覆盖前面元素的情况
例如

>>> ids = ['a', 'b', 'a', 'c']
>>> scores=[1, 2, 3, 4]
>>> ans=dict(zip(ids,scores))
>>> ans
{'a': 3, 'b': 2, 'c': 4}

正解

当scores里面是单个元素时,使用append()方法

>>> ans={}
>>> ids = ['a', 'b', 'a', 'c']
>>> scores = [1, 2, 3, 4]
>>> for i, id in enumerate(ids):
    	if id not in ans.keys():
        	ans[id] = []
   		ans[id].append(scores[i])
    
>>> ans
{'a': [1, 3], 'b': [2], 'c': [4]}

当scores里面是列表时,使用extend()方法

>>> ans={}
>>> ids = ['a', 'b', 'a', 'c']
>>> scores = [[1], [2], [3], [4]]
>>> for i, id in enumerate(ids):
    	if id not in ans.keys():
        	ans[id] = []
    	ans[id].extend(scores[i])  
>>> ans
{'a': [1, 3], 'b': [2], 'c': [4]}

进阶-defaultdict

from collections import defaultdict
ids = ['a', 'b', 'a', 'd']
scores = [1, 2, 3, 4]
id_score=zip(ids,scores)
d = defaultdict(list)
for k, v in id_score:
    d[k].append(v)
  
>>> d.items()
 dict_items([('a', [1, 3]), ('b', [2]), ('d', [4])])

from collections import defaultdict
ids = ['a', 'b', 'a', 'd']
scores = [1, 2, 3, 4]
id_score=zip(ids,scores)
d={}
for k,v in id_score:
    d.setdefault(k,[]).append(v)
    
>>> d
{'a': [1, 3], 'b': [2], 'd': [4]}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值