python - 我如何比较列表中元组中的字符串

标签 python string

我有这个元组列表[(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)

这是如何运作的?

  1. 首先定义一个 dict 对象 来累积每个名字的金额。

     summed = {}
    
  2. 遍历每对金额和名称:

     for amount, name in data:
    
  3. 使用 dict 属性,散列相同的内容将在 dict 中的相同位置结束,dict 方法:setdefault()为了确保 dict 对我们遇到的每个名字都有一个空列表,请为每个名字创建一个金额列表:

     summed.setdefault(name, []).append(amount)
    

    这会创建一个列表字典,例如:

     {'Charlie': [214.05, 213.88], 'Ben': [153.57]}
    
  4. 终于使用了 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/

相关文章:

Python 如何从字符串中删除\"

Python从列表中提取第一个元素并清理字符串

python - 一般来说,序列是否有 str.replace 等价物?

java - 在Java中比较两个字符串没有给出预期的结果

python - 精细控制 h5py 缓冲

python - 在 For 循环中创建 DataFrame 会产生 Nan 错误

Python字典: Key with two values possible?

python - Python 中的 str.join() 和 str().join() 有什么区别?

Java:相同的字符串返回不同的字节数组

string - Lua 的 string.format 的转义字符串