如何对元组列表进行分组?

2023-12-25

Note:我当然知道如何在显式 for 循环中做到这一点,但我正在寻找一个更具可读性的解决方案。

如果可能的话,我想通过使用一些内置功能来解决这个问题。最好的情况是这样的

result = [ *groupby logic* ]

假设有以下列表:

import numpy as np
np.random.seed(42)

N = 10

my_tuples = list(zip(np.random.choice(list('ABC'), size=N),
                     np.random.choice(range(100), size=N)))

where my_tuples is

[('C', 74),
 ('A', 74),
 ('C', 87),
 ('C', 99),
 ('A', 23),
 ('A', 2),
 ('C', 21),
 ('B', 52),
 ('C', 1),
 ('C', 87)]

如何使用标签 A、B 和 C 对索引(每个元组索引 1 处的整数值)进行分组groupby来自 itertools?

如果我做这样的事情:

from itertools import groupby

#..

[(k,*v) for k, v in dict(groupby(my_tuples, lambda x: x[0])).items()]

我发现这会产生错误的结果。

期望的结果应该是

{
  'A': [74, 23, 2],
  # ..
}

最简单的解决方案可能是不使用groupby at all.

from collections import defaultdict

d = defaultdict(list)

for k, v in my_tuples:
    d[k].append(v)

我不会使用的原因groupby是因为groupby(iterable)将项目分组在iterable是相邻的。所以要得到所有的'C'值放在一起,您首先必须对列表进行排序。除非你有某种理由使用groupby,没有必要。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何对元组列表进行分组? 的相关文章

随机推荐