按地名分组在python中

时间:2014-10-29 06:45:50

标签: python list

我正在尝试按照列表列表进行分组。列表如下:

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

我期待的输出如下:

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

更准确地说,输出中内部列表的第一个元素需要是2个第一个元素中的任何一个。输出中内部列表的第二个元素是输入内部列表中第二个元素的平均值。输出中内部列表的第三个元素是输入内部列表中第三个元素的平均值。

这实际上是问题的一个小版本。我拥有的列表的初始列表将包含1000个或更多列表。

由于

1 个答案:

答案 0 :(得分:0)

test.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]}]