Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 一种在元组列表中查找重复项、汇总元组值并删除使用的重复元组的有效方法_Python 3.x_List_Sum_Tuples - Fatal编程技术网

Python 3.x 一种在元组列表中查找重复项、汇总元组值并删除使用的重复元组的有效方法

Python 3.x 一种在元组列表中查找重复项、汇总元组值并删除使用的重复元组的有效方法,python-3.x,list,sum,tuples,Python 3.x,List,Sum,Tuples,我需要通过计算重复项的值,然后删除重复项来解决这个问题 我需要最有效的模式来汇总元组内的值,然后删除使用过的重复项 (name, id, age, count) facts = [('john', 1, 22, 1),('smit', 2, 17, 1),('john', 1, 22, 2),('nick', 3, 43, 1),('john', 1, 22, 1)] from operator import itemgetter def sum_and_sort_facts(self

我需要通过计算重复项的值,然后删除重复项来解决这个问题

我需要最有效的模式来汇总元组内的值,然后删除使用过的重复项

(name, id, age, count)

facts = [('john', 1, 22, 1),('smit', 2, 17, 1),('john', 1, 22, 2),('nick', 3, 43, 1),('john', 1, 22, 1)]


from operator import itemgetter


def sum_and_sort_facts(self, facts:list):

    if len(facts) <= 1:
        return facts

    buffer_list = []
    for i, f in enumerate(facts):
        if buffer_list and f[1] in [x[1] for x in buffer_list]:
            continue
        for ic, fc in enumerate(facts):
            if i == ic:
                continue
            if f[1] == fc[1]:
                buffer_list.append((f[0], f[1], f[2], f[3] + fc[3]))
        buffer_list.append(f)

    return sorted(buffer_list, key=itemgetter(3), reverse=True)
(姓名、身份证、年龄、计数)
事实=[('john',1,22,1),('smit',2,17,1),('john',1,22,2),('nick',3,43,1),('john',1,22,1)]
从运算符导入itemgetter
定义汇总和排序事实(自我、事实:列表):

如果len(事实)与理解列表在一行:

output = list(set([(x[0], x[1], x[2], sum([y[3] for y in facts if y[0]==x[0]])) for x in facts]))
[('smit',1,17,1),('nick',1,43,1),('john',1,22,4)]

也可以用熊猫来做,保留“原始”顺序:

import pandas as pd
data = [('john', 1, 22, 1),('smit', 1, 17, 1),('john', 1, 22, 2),('nick', 1, 43, 1),('john', 1, 22, 1)]
df = pd.DataFrame(data)
df = df.groupby(by=[0,1,2]).agg({3: 'sum'}).reset_index()
output = [tuple(l) for l in df.values.tolist()]
print(output)
[('john',1,22,4),('nick',1,43,1),('smit',1,17,1)]


在理解列表的一行中:

output = list(set([(x[0], x[1], x[2], sum([y[3] for y in facts if y[0]==x[0]])) for x in facts]))
[('smit',1,17,1),('nick',1,43,1),('john',1,22,4)]

也可以用熊猫来做,保留“原始”顺序:

import pandas as pd
data = [('john', 1, 22, 1),('smit', 1, 17, 1),('john', 1, 22, 2),('nick', 1, 43, 1),('john', 1, 22, 1)]
df = pd.DataFrame(data)
df = df.groupby(by=[0,1,2]).agg({3: 'sum'}).reset_index()
output = [tuple(l) for l in df.values.tolist()]
print(output)
[('john',1,22,4),('nick',1,43,1),('smit',1,17,1)]


请正确设置代码格式请正确设置代码格式谢谢@sebastien-d。很不错的。我喜欢第一个-)它有效。正是我想要的。很乐意帮助,欢迎来到Stack Overflow。如果此答案或任何其他答案解决了您的问题,请将其标记为已接受。谢谢@sebastien-d。很不错的。我喜欢第一个-)它有效。正是我想要的。很乐意帮助,欢迎来到Stack Overflow。如果此答案或任何其他答案解决了您的问题,请将其标记为已接受。