python - 创建字典,其中键来自列表,值是另一个列表中相应元素的总和

标签 python list dictionary

我有两个列表 L1 和 L2。 L1 中的每个唯一元素都是一个键,它在第二个列表 L2 中具有值。我想创建一个字典,其中的值是 L2 中与 L1 中相同键关联的元素的总和。

我做了以下操作,但我对这段代码并不感到自豪。有没有更简单的 pythonic 方法来做到这一点?

L = [2, 3, 7, 3, 4, 5, 2, 7, 7, 8, 9, 4] # as L1
W = range(len(L)) # as L2

d = { l:[] for l in L }
for l,w in zip(L,W): d[l].append(w)
d = {l:sum(v) for l,v in d.items()}

编辑:

问:我如何知道 L2 的哪些元素与 L1 的给定关键元素相关联?

A:如果他们有相同的索引。例如,如果元素 7 在 L1 中重复了 3 次(例如 L1[2] == L1[7] == L1[8] = 7),那么我希望键 7 的值为 L2[2]+ L2[7]+L2[8]

最佳答案

您可以使用 enumerate() 来访问项目的索引,同时循环遍历列表并使用 collections.defaultdict() (通过传递 int 因为它缺少函数,第一次将被评估为 0)以保留项目并在遇到重复键时添加值:

>>> from collections import defaultdict

>>> d = defaultdict(int)
>>> for i,j in enumerate(L):
...     d[j]+=i
... 
>>> d
defaultdict(<type 'int'>, {2: 6, 3: 4, 4: 15, 5: 5, 7: 17, 8: 9, 9: 10})

关于python - 创建字典,其中键来自列表,值是另一个列表中相应元素的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35748384/

相关文章:

list - 简单 Prolog 谓词上的 "Out of stack"错误

c# - 使用字典创建对象的新实例

python - next() 在 python 中的任何/全部都不能很好地发挥作用

python - SQLAlchemy 转换为带有时区的 PostgreSQL 时间戳

python - 使用Python的多处理模块的同步问题

python - 用python衡量内存的使用情况

python - 过滤列表以仅保留出现一次的对象

html - 覆盖列表样式

python - 如何在 Python 中设置字典的初始大小?

python - 从python中的字符串中提取未知子字符串