给定一个[string,number]元组列表,创建一个字典,其中键是字符串的第一个字符,值是数字的总和
我有一个元组列表,其中第一个对象是一个字符串,第二个对象是一个数字。我需要创建一个字典,使用字符串的第一个字母作为键和数字(或者如果键相同,我需要添加一些数字)作为值。例如:
输入
lst = [('Alex', 5), ('Addy', 7), ('Abdul', 2), ('Bob', 6), ('Carl', 8), ('Cal', 4)]
输出
dct = {'A': 14, 'B': 6, 'C': 12}
回答
最简单、直接、天真的方法是:
dct = {}
for k, v lst:
if k in v:
dct[k] += v
else:
dct[k] = v
有一些方法可以逐渐变得更聪明,第一种可能是使用.get
默认值:
dct = {}
for k, v in lst:
dct[k] = dct.get(k, 0) + v
最后,您可以使用 a collections.defaultdict
,它接受一个“工厂”函数,如果键不存在,它将被调用,int
用作因子:
from collections import defaultdict
dct = defaultdict(int)
for k, v in lst:
dct[k] += v
注意:为此创建一个常规的 dict 通常更安全,以避免默认行为:
dct = dict(dct)
甚至
dct.default_factory = None
最后,更灵活的方法之一是创建自己的dict
子类并使用__missing__
,如果在设置默认值时需要访问密钥,这很有用,所以在这里不是特别有用,但为了完成:
class AggDict(dict):
def __missing__(self, key):
return 0
dct = AggDict()
for k, v in dct:
dct[k] += v
THE END
二维码