gpt4 book ai didi

python - 仅使用元组的前两个部分将 3 元组与 3 元组列表进行比较

转载 作者:太空宇宙 更新时间:2023-11-04 10:00:06 25 4
gpt4 key购买 nike

我在一个 Python 程序中有一个 3 元组列表,我在查看一个文件时正在构建它(一次一个),设置如下:

(feature,combination,durationOfTheCombination),

这样,如果找到特征和组合的独特组合,它将被添加到列表中。该列表本身具有类似的设置,但 durationOfTheCombination 是共享唯一组合(特征,组合)的所有持续时间的总和。因此,在决定是否将其添加到列表中时,我只需要比较元组的前两部分,如果找到匹配项,则将持续时间添加到相应的列表项中。

为了清楚起见,这里有一个例子。如果输入是(ABC,123,10);(ABC,123,10);(DEF,123,5);(ABC,123,30);(EFG,456,30)输出将为 (ABC,123,50);(DEF,123,5);(EFG,456,30)

有什么办法可以进行这种比较吗?

最佳答案

您可以使用 Counter 执行此操作,

In [42]: from collections import Counter
In [43]: lst = [('ABC',123,10),('ABC',123,10),('DEF',123,5)]
In [44]: [(i[0],i[1],i[2]*j) for i,j in Counter(lst).items()]
Out[44]: [('DEF', 123, 5), ('ABC', 123, 20)]

根据 OP 建议,如果它有不同的值,请使用 groupby

In [26]: lst = [('ABC',123,10),('ABC',123,10),('ABC',123,25),('DEF',123,5)]

In [27]: [tuple(list(n)+[sum([i[2] for i in g])]) for n,g in groupby(sorted(lst,key = lambda x:x[:2]), key = lambda x:x[:2])]
Out[27]: [('ABC', 123, 45), ('DEF', 123, 5)]

关于python - 仅使用元组的前两个部分将 3 元组与 3 元组列表进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44002224/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com