程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

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

发布于2019-12-26 07:41     阅读(1360)     评论(0)     点赞(7)     收藏(3)


我有这个元组列表[(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 object以累积每个名称的金额。

    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. 最后,使用a comprehension可以sum()将所有具有相同名称的项目设置为up。

    summed = [(sum(amounts), name) for name, amounts in summed.items()]

结果:

[(427.93, 'Charlie'), (153.57, 'Ben')]


所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:https://www.pythonheidong.com/blog/article/186221/2dbe491af8adc42c14e5/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

7 0
收藏该文
已收藏

评论内容:(最多支持255个字符)