我有这个元组列表[(amount, name)]
:
[(214.05, 'Charlie'), (153.57, 'Ben'),(213.88, 'Charlie')]
我试图通过它们的名称比较它们,如果有一个具有相同名称的元组,我想将数量加在一起。
输出将进入另一个具有相同结构[(amount,name)]
的列表。
我设法用这个提取名称部分:
for i in range(0, len(spendList)):
print(spendList[i][1])
输出:
Charlie
Ben
Charlie
如何比较名称?
最佳答案
执行此类操作的一种方法是使用 dict.setdefault()
喜欢:
代码:
data = [(214.05, 'Charlie'), (153.57, 'Ben'), (213.88, 'Charlie')]
summed = {}
for amount, name in data:
summed.setdefault(name, []).append(amount)
summed = [(sum(amounts), name) for name, amounts in summed.items()]
print(summed)
这是如何运作的?
首先定义一个
dict 对象
来累积每个名字的金额。summed = {}
遍历每对金额和名称:
for amount, name in data:
使用
dict
属性,散列相同的内容将在 dict 中的相同位置结束,dict
方法:setdefault()
为了确保 dict 对我们遇到的每个名字都有一个空列表,请为每个名字创建一个金额列表:summed.setdefault(name, []).append(amount)
这会创建一个列表字典,例如:
{'Charlie': [214.05, 213.88], 'Ben': [153.57]}
终于使用了
comprehension
我们可以sum()
将所有具有相同名称的项目相加。summed = [(sum(amounts), name) for name, amounts in summed.items()]
结果:
[(427.93, 'Charlie'), (153.57, 'Ben')]
关于python - 我如何比较列表中元组中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48358326/