如何解决如何对列表中的元素进行分组?
我有一个清单清单。每个列表包含三个元素,将它们称为[number,letter,time]
。看起来像这样:
my_list = [[0,'a','0:00'],[1,'1:00'],[2,'b','2:00'],[3,'c','3:00'],[4,'4:00'],[5,'5:00'],[6,'d','6:00'],[7,'7:00'],[8,'8:00'],[9,'e','9:00']]
我要设置此列表的格式,以使element[1]
(每个嵌套列表的letter
)成为新嵌套列表的element[0]
,出现number
和{ {1}}分别为time
和element[1]
。
我想要的输出应该像这样
element[2]
到目前为止,我已经使用my list = [['a',[0,1,5],['0:00','1:00','5:00']],['b',4,8],['2:00','4:00','8:00']],['c',7],['3:00','7:00']],['d',[6],['6:00']],['e',[9],['9:00']]]
来获取collections.Counter()
的频率
letter
我相信我可以使用列表理解来使用>>> letter_count = Counter([element[1] for element in my_list])
>>> letter_count
Counter({'a': 3,'b': 3,'c': 2,'d': 1,'e': 1})
和条件字符串来完成其余的过程,但是我遇到了麻烦。有什么建议吗?
此外,欢迎大家提出有关更好,更具描述性的标题的建议(为了后代)。
解决方法
out = {}
for a,b,c in my_list:
out.setdefault(b,[]).append((a,c))
out = [[k,[i for i,_ in v],[i for _,i in v]] for k,v in out.items()]
print(out)
打印:
[['a',[0,1,5],['0:00','1:00','5:00']],['b',[2,4,8],['2:00','4:00','8:00']],['c',[3,7],['3:00','7:00']],['d',[6],['6:00']],['e',[9],['9:00']]]
,
另一种方法是使用itertools.groupby
import itertools
new_list = []
my_list = sorted(my_list,key=lambda row: row[1])
for name,groups in itertools.groupby(my_list,key=lambda row: row[1]):
groups = list(zip(*groups))
grouped_item = [name,groups[0],groups[2]]
new_list.append(grouped_item)
print(new_list)
[['a',(0,5),('0:00','5:00')],(2,8),('2:00','8:00')],(3,7),('3:00','7:00')],(6,),('6:00',)],(9,('9:00',)]]
,
这是一种快速的肮脏方法(与当前其他答案效率相同,但代码更多)
my_list = [[0,'a','0:00'],[1,'1:00'],'b','2:00'],'c','3:00'],[4,'4:00'],[5,'5:00'],[6,'d','6:00'],[7,'7:00'],[8,'8:00'],[9,'e','9:00']]
tmp_dict = {}
for first,second,third in my_list:
if second not in tmp_dict:
tmp_dict[second] = [[],[]]
tmp_dict[second][0].append(first)
tmp_dict[second][1].append(third)
new_list = []
for key,val in tmp_dict.items():
new_list.append([key] + val)
print(new_list)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。