给定一个[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


以上是给定一个[string,number]元组列表,创建一个字典,其中键是字符串的第一个字符,值是数字的总和的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>