gpt4 book ai didi

python - 在Python中合并部分元组

转载 作者:行者123 更新时间:2023-11-30 23:27:13 25 4
gpt4 key购买 nike

我有数百个采用以下格式的元组(id1、id2、id3、[xydata])例如:

('a', 'b', 'c', [(1, 2),(2, 3),(3, 4)])
('a', 'b', 'c', [(1, 1),(2, 4),(3, 6)])
('a', 'b', 'd', [(1, 3),(2, 6),(3, 7)])
('a', 'b', 'd', [(1, 7),(2, 8),(3, 9)])

现在我想合并元组,以便以相同的三个值开头的元组按以下方式组合。我保证所有 xydata 中都有相同的 X 值:

('a', 'b', 'c', [(1, mean(2, 1)),(2, mean(3, 4)),(3, mean(4, 6))])
('a', 'b', 'd', [(1, mean(3, 7)),(2, mean(6, 8)),(3, mean(7, 9))])

当前的解决方案需要几个步骤来重新排序和分解数据,将元组存储在多层字典中,然后将它们组合并重建原始数据结构。有没有一种简洁且 Pythonic 的方法来做到这一点?

最佳答案

使用itertools.groupby , izip和一些列表理解:

from itertools import groupby, izip
from pprint import pprint

lis = [('a', 'b', 'c', [(1, 2), (2, 3), (3, 4)]), ('a', 'b', 'c', [(1, 1), (2, 4), (3, 6)]), ('a', 'b', 'd', [(1, 3), (2, 6), (3, 7)]), ('a', 'b', 'd', [(1, 7), (2, 8), (3, 9)])]

def solve(seq, X):
for k, g in groupby(seq, key=lambda x:x[:3]):
data = ((y[1] for y in x[3]) for x in g)
yield tuple(list(k) + [[(a, sum(b, 0.0)/len(b))
for a, b in izip(X, izip(*data))]])

X = [a for a, _ in lis[0][3]]
pprint(list(solve(lis, X)))

输出:

[('a', 'b', 'c', [(1, 1.5), (2, 3.5), (3, 5.0)]),
('a', 'b', 'd', [(1, 5.0), (2, 7.0), (3, 8.0)])]

关于python - 在Python中合并部分元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22229636/

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