python中的按地名分组

2024-06-14 20:30:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试着按我所拥有的列表来分组。清单如下:

[[[-50,98],1,2,'San Antonio,TX'],[[-52,99],3,4,'San Antonio,TX']]

我期望的结果如下:

{'San Antonio,TX': [[-50,98],2, 3]}

更准确地说,输出中内部列表的第一个元素需要是前两个元素中的任意一个。输出中内部列表的第二个元素是输入的内部列表中第二个元素的平均值。输出中内部列表的第三个元素是输入的内部列表中第三个元素的平均值。你知道吗

这实际上是问题的一个小版本。我的列表的初始列表将有1000个或更多的列表。你知道吗

谢谢


Tags: 版本元素列表平均值santxantonio
1条回答
网友
1楼 · 发布于 2024-06-14 20:30:07

的内容测试.py你知道吗

from itertools import groupby
from operator import itemgetter


def aggregate(data):
    result = []
    data = sorted(data, key=itemgetter(3))
    for k, g in groupby(data, itemgetter(3)):
        g = list(g)
        n = len(g)  # Cast to float if you want average to be float in python 2
        x1 = g[0][0]
        x2 = sum(x[1] for x in g)
        x3 = sum(x[2] for x in g)
        d = {k: [x1, x2/n, x3/n]}  # This is what you want for each group
        result.append(d)

    return result


def main():
    data = [[[-50,98], 1, 2, 'San Antonio,TX'],
            [[-52,99], 3, 4, 'San Antonio,TX']]
    result = aggregate(data)
    print(result)

if __name__ == '__main__':
    main()

结果:

In [12]: run test.py
[{'San Antonio,TX': [[-50, 98], 2, 3]}]

相关问题 更多 >