Python 每当项目出现在第一个列表中时,将第二个列表的内容相加

Python 每当项目出现在第一个列表中时,将第二个列表的内容相加,python,list,addition,Python,List,Addition,我有两个列表:标记和权重(它们排列在一起:权重[I]代表标记[I])。标记可以出现多次。所以,我要做的是将每个标签的所有权重相加,得到每个标签的总权重 列表如下所示 tags = ['alternative', 'indie', 'jam rock', 'indie', 'alternative', 'punk'] weights = [100, 20, 45, 50, 75, 50] 我想得到的是: tags = ['alternative', 'indie', 'jam rock', 'p

我有两个列表:标记和权重(它们排列在一起:权重[I]代表标记[I])。标记可以出现多次。所以,我要做的是将每个标签的所有权重相加,得到每个标签的总权重

列表如下所示

tags = ['alternative', 'indie', 'jam rock', 'indie', 'alternative', 'punk']
weights = [100, 20, 45, 50, 75, 50]
我想得到的是:

tags = ['alternative', 'indie', 'jam rock', 'punk']
weights =[175, 70, 45, 50]
我尝试过使用各种各样的循环,但我不知道如何正确地得到它。我一直在使用
.remove(I)
,这将消除重复的标记,但这就是我所能做的

有什么办法吗?

使用字典(如果您想简化代码,可以使用defaultdict)

使用字典(如果您想简化代码,可以使用defaultdict)


作为一种替代方法,您可以使用Python的
计数器,如下所示:

from collections import Counter

tags = ['alternative', 'indie', 'jam rock', 'indie', 'alternative', 'punk']
weights = [100, 20, 45, 50, 75, 50]
totals = Counter()

for t, w in zip(tags, weights):
    totals[t] += w

print totals
这将显示以下输出:

Counter({'alternative': 175, 'indie': 70, 'punk': 50, 'jam rock': 45})

然后可以像使用普通字典一样使用
总计
,例如
打印总计['indie']
将返回
70

,作为替代方法,您可以使用Python的
计数器
,如下所示:

from collections import Counter

tags = ['alternative', 'indie', 'jam rock', 'indie', 'alternative', 'punk']
weights = [100, 20, 45, 50, 75, 50]
totals = Counter()

for t, w in zip(tags, weights):
    totals[t] += w

print totals
这将显示以下输出:

Counter({'alternative': 175, 'indie': 70, 'punk': 50, 'jam rock': 45})

然后可以像使用普通字典一样使用
总计
,例如
打印总计['indie']
将返回
70

我建议在这种情况下使用字典,因为平行列表很容易错位。下面是一个使用的示例,如评论中建议的铁拳

from collections import defaultdict
tagDict = defaultdict(int)
tags = ['alternative', 'indie', 'jam rock', 'indie', 'alternative', 'punk']
weights = [100, 20, 45, 50, 75, 50]

for i in range(len(tags)):
    tagDict[tags[i]] += weights[i]

print tagDict

我建议在这种情况下使用字典,因为平行列表很容易错位。下面是一个使用的示例,如评论中建议的铁拳

from collections import defaultdict
tagDict = defaultdict(int)
tags = ['alternative', 'indie', 'jam rock', 'indie', 'alternative', 'punk']
weights = [100, 20, 45, 50, 75, 50]

for i in range(len(tags)):
    tagDict[tags[i]] += weights[i]

print tagDict

使用
集合中的
defaultdict

>>> tags = ['alternative', 'indie', 'jam rock', 'indie', 'alternative', 'punk']
>>> weights = [100, 20, 45, 50, 75, 50]
>>> 
>>> 
>>> from collections import defaultdict
>>> 
>>> d = defaultdict(int)
>>> 
>>> for k,v in zip(tags, weights):
        d[k] += v

>>> d
defaultdict(<class 'int'>, {'jam rock': 45, 'punk': 50, 'alternative': 175, 'indie': 70})
>>> 
>>> d['alternative']
175
标签=['alternative'、'indie'、'jam rock'、'indie'、'alternative'、'punk'] >>>权重=[100,20,45,50,75,50] >>> >>> >>>从集合导入defaultdict >>> >>>d=默认dict(int) >>> >>>对于拉链中的k、v(标签、重量): d[k]+=v >>>d defaultdict(,{'jam rock':45,'punk':50,'alternative':175,'indie':70}) >>> >>>d[“备选方案”] 175
使用
collections
中的
defaultdict

>>> tags = ['alternative', 'indie', 'jam rock', 'indie', 'alternative', 'punk']
>>> weights = [100, 20, 45, 50, 75, 50]
>>> 
>>> 
>>> from collections import defaultdict
>>> 
>>> d = defaultdict(int)
>>> 
>>> for k,v in zip(tags, weights):
        d[k] += v

>>> d
defaultdict(<class 'int'>, {'jam rock': 45, 'punk': 50, 'alternative': 175, 'indie': 70})
>>> 
>>> d['alternative']
175
标签=['alternative'、'indie'、'jam rock'、'indie'、'alternative'、'punk'] >>>权重=[100,20,45,50,75,50] >>> >>> >>>从集合导入defaultdict >>> >>>d=默认dict(int) >>> >>>对于拉链中的k、v(标签、重量): d[k]+=v >>>d defaultdict(,{'jam rock':45,'punk':50,'alternative':175,'indie':70}) >>> >>>d[“备选方案”] 175
请通过提供输入和预期输出以及您迄今为止的尝试,让您的问题更清楚!模式:使用计数器或
zip()
weight
列表中迭代。建立一个dict,使用标签作为键,权重列表作为值。好的,我已经编辑以澄清!这里有一个提示:您可以使用
defaultdict
这有帮助吗?请通过提供输入和预期输出以及您迄今为止所做的尝试,让您的问题更加清楚!模式:使用计数器或
zip()
weight
列表中迭代。建立一个dict,使用标签作为键,权重列表作为值。好的,我已经编辑以澄清!这里有一个提示:您可以使用
defaultdict
这有帮助吗?