繁体   English   中英

使用Python按列表中的唯一列值分组

[英]group by unique column values in list using Python

我有一个列为A,B,C,D的列表,我想通过一组唯一D列的值来重新格式化列表。 清单

列出图片

预期产量:

list=[d1[[1,11,n1],[1,22,n2]],d2[[3,33,n3]]

然后在d1下打印所有列表:

[1,11,n1],[1,22,n2]

您可以使用operator.itemgetter()提取感兴趣的字段(字段3D列)。 然后使用itertools.groupby()提取具有公共密钥的组:

>>> from operator import itemgetter
>>> from itertools import groupby
>>> data = [ [1, 11,'n1','d1'],
         [2, 22, 'n2', 'd1'],
         [3, 33, 'n3', 'd2'],
]
>>> data.sort(key=itemgetter(3))   # sort by column d
>>> result = []
>>> for k, groups in groupby(data, key=itemgetter(3)):
        entry = [group[:-1] for group in groups]
        result.append((k, entry))

>>> result
[('d1', [[1, 11, 'n1'], [2, 22, 'n2']]), ('d2', [[3, 33, 'n3']])]

如果只想打印d1组,则代码更简单:

>>> for k, groups in groupby(data, key=itemgetter(3)):
        if k == 'd1':
            print([group[:-1] for group in groups])

[[1, 11, 'n1'], [2, 22, 'n2']]

代码[group[:-1] for group in groups]使用切片列表推导来删除键字段,如预期输出所示。

希望这可以帮助 :-)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM