python如何列表去重取最大值?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python如何列表去重取最大值?相关的知识,希望对你有一定的参考价值。

list=[('小王', '第一次考试', '5'), ('小陈', '第二次考试', '7'), ('小陈', '第一次考试', '1')]

python如何实现,我要输出为:
[('小王', '第一次考试', '5'), ('小陈', '第二次考试', '7')]
取个人历史最高分

参考技术A

list=[('小王', '第一次考试', '5'), ('小陈', '第二次考试', '7'), ('小陈', '第一次考试', '1'),('小王', '第六次考试', '20')]

dic =     

list1=[]


for person in list:

    if person[0] not in dic.keys():

        dic[person[0]] = person

    elif int(dic[person[0]][2]) < int(person[2]):

            dic[person[0]] = person

for value in dic.values():

    list1.append(value)

print(list1)

*.你看到的代码应该是没有缩进了,你可以右键>检查,从相应的源码中能看到相关的缩进

---------

稍等我给你写下思路:

总体的思路就是动态的改变字典dic,字典中的键是tuple的第1个元素,即人名,相应的键值就是整个tuple,如 dic='小王': ('小王', '第一次考试', '5'); 而a.这个字典中的键值对是不断增加的,b.键值是不断改变的.这里的a,b两点要怎么理解呢?


先说a.这个字典中的键值对是不断增加的?

比如说我一开始的字典是空的,然后我遍历字典的时候,我会拿每次取到的列表中的元素(即元素)的第1个元素作为键,去dic中找,看看当前dic中是否有这个键,如果没有,则我会在dic中新增一个键值对,这个键值对的键即tuple的第1个元素,相应的键值为整个tuple,举例:

当前dic为'小王': ('小王', '第一次考试', '5'),假如我遍历到list中的第2个元素,即 ('小陈','第二次考试','7') ,我会取这个tuple的第1个元素,即'小陈',看看dic字典的键中是否有'小陈',结果一看dic中只有一个键'小王',没有'小陈',则我会在dic中新增一个键值对,最后得到新的dic: '小王': ('小王', '第一次考试', '5'), '小陈':('小陈','第二次考试','7').

再一看b点:键值是不断变化的:

接上面说,此时字典dic的值为'小王': ('小王', '第一次考试', '5'), '小陈':('小陈','第二次考试','7'),然后列表我遍历到了第3个元素,即('小陈','第一次考试','1')。此时前面的处理逻辑还是一样的,取tuple中的第1个元素去dic的键中找,看看是否存在,一找存在,字典dic中有'小陈'这个键了,则继续第2步,用dic中'小陈'键值tuple中的第3个元素和当前从列表中取的第1个元素为'小陈'的tuple的第3个元素相比较,如果字典中的那个大,则字典中'小陈'的键值不变,如果从列表中拿到的这个tuple中第3个值大,则将字典中'小陈'的键值整个替换为从列表中取的这个当前tuple.

最终我们得到了一个键唯一,且相应键值为首个元素相同tuples中第3个值最大的这么一个字典。

因为你要求最终得到的类型是字典,所以接下来就是如果将这个字典dic转化为你要的字典,dic.alues()得到的是dic中所有值的这么一个迭代器,然后使用for循环遍历这个迭代器,把每次迭代器中取的值都追加到列表list1中。

最终打印的list1,符合题目要求

本回答被提问者采纳
参考技术B

lst=[('小王','第一次考试','5'),('小陈','第一次考试','7'),('小王','第一次考试','1')]

d=

for x in lst:

if x[0] in d:

if x[2]>d[x[0]][2]:

d[x[0]]=x

else:

d[x[0]]=x

print(d)

以上是关于python如何列表去重取最大值?的主要内容,如果未能解决你的问题,请参考以下文章

mysql 基本操作-去重取字段名查询表达式常量等和+号

Oracle如何去重?

20190125-找到列表第二大的数以及自己写一个冒泡排序

python如何找到列表中极大值

python中如何取一列数最大值

如何使用 Python 获取列表列表中最大列表的索引?