Python:使用另一个lis的索引汇总列表中的数据

2024-10-01 05:05:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两张单子:

L1 = ['A','B','A','C','A']
L2 = [1,   4,  6,  1,  3]

我想创建一个具有以下输出的字典:

DictOutSum = {'A':10, 'B':4, 'C':1}
DictOutCount = {'A':3, 'B':1, 'C':1}

也就是说,列表L1和L2都有相同数量的元素,其中的元素一一对应。我想为L1中每个唯一的元素找到L2中所有数字的总和,并用它来编一本字典(DictOutSum)。我还想创建另一个字典来存储L1的唯一元素数(DictOutCount)。你知道吗

除了使用for循环,我甚至不知道从哪里开始。你知道吗


Tags: 元素l1列表for数量字典数字单子
3条回答

纯python实现:

>>> dict_sum = dict.fromkeys(L1, 0)
>>> dict_count = dict.fromkeys(L1, 0)
>>> for k,n in zip(L1, L2):
...    dict_sum[k] += n
...    dict_count[k] += 1
...     
>>> dict_sum
{'A': 10, 'B': 4, 'C': 1}
>>> dict_count
{'A': 3, 'B': 1, 'C': 1}

花哨的单行程序实现:

>>> from collections import Counter
>>> Counter(L1)  # dict_count
Counter({'A': 3, 'B': 1, 'C': 1})
>>> sum((Counter({k:v}) for k,v in zip(L1, L2)), Counter())  # dict_sum
Counter({'A': 10, 'B': 4, 'C': 1})
>>> L1 = ['A','B','A','C','A']
>>> L2 = [1,   4,  6,  1,  3]
>>>
>>> DictOutCount = {v:0 for v in L1}
>>> DictOutSum = {v:0 for v in L1}
>>> for v1,v2 in zip(L1,L2):
...   DictOutCount[v1] += 1
...   DictOutSum[v1] += v2
...
>>>
>>> DictOutCount
{'A': 3, 'C': 1, 'B': 1}
>>> DictOutSum
{'A': 10, 'C': 1, 'B': 4}
>>>

您应该使用zip内置函数

import collections

DictOutSum = collections.defaultdict(int)
DictOutCount = collections.defaultdict(int)

for l1, l2 in zip(L1, L2):
    DictOutSum[l1] += l2
    DictOutCount[l1] += 1

相关问题 更多 >