Python 每当项目出现在第一个列表中时,将第二个列表的内容相加
我有两个列表:标记和权重(它们排列在一起:权重[I]代表标记[I])。标记可以出现多次。所以,我要做的是将每个标签的所有权重相加,得到每个标签的总权重 列表如下所示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
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
这有帮助吗?