我有两个列表 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/