本文介绍了如何对元组列表进行分组?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述 29岁程序员,3月因学历无情被辞! 注意:我当然知道如何在显式的for循环中做到这一点,但我正在寻找一种更具可读性的解决方案。 如果可能的话,我想通过使用一些内置功能来解决这个问题。最好的情况是类似 结果= [* groupby逻辑*] 假设以下列表: 导入numpy为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))) 其中 my_tuples 是 [('C',74),('A',74),('C',87),('C',99) ,('A',23),('A',2),('C',21),('B',52),('C',1),('C',87)] 如何使用itertools中的 groupby 通过标签A,B和C对索引(每个元组的索引1的整数值)进行分组? 如果我做这样的事情: 来自itertools import groupby #.. [(k,* v)for dict中的k,v(groupby(my_tuples,la mbda x:x [0]))。items()] 我看到这提供了错误的信息结果。 期望的结果应该是 {'A':[74,23,2],#.. } 解决方案对于O( n )解决方案,应使用 collections.defaultdict ,请参见 @PatrickHaugh的答案。 使用 itertools .groupby 需要在分组之前进行排序,从而导致O( n log n )复杂度: 来自操作员导入项的来自操作员导入项的获取 sorter = sorted(my_tuples,key = itemmetter(0)) grouper = groupby(sorter,key = itemgetter(0)) res = {k:grouper中k,v的list(map(itemgetter(1),v))} 打印(res) {'A':[74,23,2],'B':[52],'C':[74,87 ,99,21,1,87]} Note: I know how I can do this of course in an explicit for loop but I am looking for a solution that is a bit more readable.If possible, I'd like to solve this by using some of the built-in functionalities. Best case scenario is something likeresult = [ *groupby logic* ]Assuming the following list:import numpy as npnp.random.seed(42)N = 10my_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)]How can I group the indices (integer value at index 1 of each tuple) by the labels A, B and C using groupby from itertools?If I do something like this:from itertools import groupby#..[(k,*v) for k, v in dict(groupby(my_tuples, lambda x: x[0])).items()]I see that this delivers the wrong result.The desired outcome should be { 'A': [74, 23, 2], # ..} 解决方案 You should use collections.defaultdict for an O(n) solution, see @PatrickHaugh's answer.Using itertools.groupby requires sorting before grouping, incurring O(n log n) complexity:from itertools import groupbyfrom operator import itemgettersorter = sorted(my_tuples, key=itemgetter(0))grouper = groupby(sorter, key=itemgetter(0))res = {k: list(map(itemgetter(1), v)) for k, v in grouper}print(res){'A': [74, 23, 2], 'B': [52], 'C': [74, 87, 99, 21, 1, 87]} 这篇关于如何对元组列表进行分组?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持! 上岸,阿里云!
07-30 02:56