首页 > 解决方案 > 给定一个 [string, number] 元组列表,创建一个字典,其中键是字符串的第一个字符,值是数字的总和

问题描述

我有一个元组列表,其中第一个对象是字符串,第二个对象是数字。我需要创建一个字典,使用字符串的第一个字母作为键和数字(或者如果键相同,我需要添加一些数字)作为值。例如:

输入

lst = [('Alex', 5), ('Addy', 7), ('Abdul', 2), ('Bob', 6), ('Carl', 8), ('Cal', 4)]

输出

dct = {'A': 14, 'B': 6, 'C': 12}

标签: pythondictionary

解决方案


最简单、直接和幼稚的方法是:

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

注意:创建一个常规的字典通常更安全,以避免默认行为:

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

推荐阅读