如何计算第一个元素相同的嵌套列表的第二个元素?
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]
我有一个如下所示的嵌套列表:
[['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]