如何计算第一个元素相同的嵌套列表的第二个元素?

how count the second elements of a nested list where they have the first elements identical?

我有一个如下所示的嵌套列表:

[['A',4],['U',9],['O',9],['A',1],['O',2],['O',1]]

如果第一个元素相同,我如何计算第二个元素?

输出:

A,5
U,9
O,12 

不使用非高效循环

其中一个选项是使用 defaultdict,默认使用 int。对于 int,默认值为 0

from collections import defaultdict

l = [["A", 4], ["U", 9], ["O", 9], ["A", 1], ["O", 2], ["O", 1]]

d = defaultdict(int)

for i in l:
    k, v = i
    d[k] += v
    
# defaultdict(<class 'int'>, {'A': 5, 'U': 9, 'O': 12})

print("\n".join(f"{k},{v}" for k, v in d.items()))
# A,5
# U,9
# O,12

使用 Counter.

from collections import Counter

L = [['A', 4], ['U', 9], ['O', 9], ['A', 1], ['O', 2], ['O', 1]]

c = Counter()
for item, count in L:
    c[item] += count
>>> c
Counter({'O': 12, 'U': 9, 'A': 5})

如果插入顺序很重要,请注意 Counter 以降序显示其项目,但如果您遍历它,插入顺序将保留:

>>> list(c)
['A', 'U', 'O']

这应该可以工作并且性能最佳:

l = [['A', 4], ['U', 9], ['O', 9], ['A', 1], ['O', 2], ['O', 1]]
d = dict()
for i in l : 
    if not (i[0] in d.keys()) :
        d[i[0]] = i[1]
    else :
        d[i[0]] += i[1]