首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python将两个不同的列表合并为一个

python将两个不同的列表合并为一个
EN

Stack Overflow用户
提问于 2017-10-09 11:48:50
回答 2查看 68关注 0票数 1

我有两次不同的考试成绩。我将两个测试存储在一个单独的列表中。我如何合并这两个列表并获得最终结果?

代码语言:javascript
复制
returnn = sorted(returnscore, key=itemgetter('score'), reverse=True) 
for rij in returnn:
    print rij

输出:

代码语言:javascript
复制
{'E-mail': 'tim@gmail.com', 'score': 10}
{'E-mail': 'tim@gmail.com', 'score': 10}
{'E-mail': 'tim@gmail.com', 'score': 10}
{'E-mail': 'tim@gmail.com', 'score': 10}
{'E-mail': 'hihallo@gmail.com', 'score': 5}
{'E-mail': 'noreply@com', 'score': 5}
{'E-mail': 'marketing@nl', 'score': 5}

spff = sorted(spfscore, key=itemgetter('score'), reverse=True) 
for rij in spff:
    print rij

输出:

代码语言:javascript
复制
{'E-mail': 'tim@gmail.com', 'score': 3}
{'E-mail': 'tim@gmail.com', 'score': 0}
{'E-mail': 'tim@gmail.com', 'score': 7}
{'E-mail': 'tim@gmail.com', 'score': 0}
{'E-mail': 'hihallo@gmail.com', 'score': 0}
{'E-mail': 'noreply@com', 'score': 0}
{'E-mail': 'arketing@nl', 'score': 1}

我想要的输出是:

代码语言:javascript
复制
{'E-mail': 'tim@gmail.com', 'score': 50}
{'E-mail': 'hihallo@gmail.com', 'score': 5}
{'E-mail': 'noreply@com', 'score': 5}
{'E-mail': 'arketing@nl', 'score': 6}

我已经想了几个小时了。我只是不明白我怎么能数分数,然后去掉复本。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-09 11:55:50

一种简单的方法是简单地创建一个新的dict对象,其中包含电子邮件地址作为其(唯一)键,然后迭代列表,如果元素已经在列表中,则增加分数计数,或者如果电子邮件地址尚未在dict中,则创建带有分数计数的dict条目。

代码语言:javascript
复制
scores_raw = [{'E-mail': 'tim@gmail.com', 'score': 10},
{'E-mail': 'tim@gmail.com', 'score': 10},
{'E-mail': 'tim@gmail.com', 'score': 10},
{'E-mail': 'tim@gmail.com', 'score': 10},
{'E-mail': 'hihallo@gmail.com', 'score': 5},
{'E-mail': 'noreply@com', 'score': 5},
{'E-mail': 'marketing@nl', 'score': 5}]

scores_unique = {}
for item in scores_raw:
    if item['E-mail'] not in scores_unique:
        scores_unique.update({item['E-mail']: item['score']})
    else:
        scores_unique[item['E-mail']] += item['score']

print (scores_unique)

输出:{'tim@gmail.com': 40, 'hihallo@gmail.com': 5, 'noreply@com': 5, 'marketing@nl': 5}

票数 2
EN

Stack Overflow用户

发布于 2017-10-09 12:39:25

从迭代工具中使用groupby的另一种方法

代码语言:javascript
复制
from itertools import groupby

scores_raw = [
{'E-mail': 'tim@gmail.com', 'score': 10},
{'E-mail': 'tim@gmail.com', 'score': 10},
{'E-mail': 'tim@gmail.com', 'score': 10},
{'E-mail': 'tim@gmail.com', 'score': 10},
{'E-mail': 'hihallo@gmail.com', 'score': 5},
{'E-mail': 'noreply@com', 'score': 5},
{'E-mail': 'marketing@nl', 'score': 5}
]


scores_unique=[]
for _key, _items in groupby(sorted(scores_raw),key=lambda x: x['E-mail']):    
    scores_unique.append({
        'E-mail':_key,
        'score':sum(item['score'] for item in _items)
    })

print (scores_unique)

结果:

代码语言:javascript
复制
[{'E-mail': 'hihallo@gmail.com', 'score': 5}, {'E-mail': 'marketing@nl', 'score': 5}, {'E-mail': 'noreply@com', 'score': 5}, {'E-mail': 'tim@gmail.com', 'score': 40}]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46645753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档