python – 如何按排序顺序对列表中的项进行分组?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 如何按排序顺序对列表中的项进行分组?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1620字,纯文字阅读大概需要3分钟。
内容图文
![python – 如何按排序顺序对列表中的项进行分组?](/upload/InfoBanner/zyjiaocheng/750/a17dcd9615e84493bb813c179a0498e2.jpg)
我有一些列表,包括这样的元组
one = [(4, 'a'), (3, 'b'), (2, 'c'), (3, 'd'), (5, 'e'), (6, 'f')]
我想基于该整数对列表1上的项目进行分组,以创建具有这样的输出的新数组
final = [(g1, 2, ['c']), (g2, 3, ['b','d']), (g3, 4, ['a']), (g4, 5, ['e']), (g5, 6, ['f'])]
我不知道在创建最终列表. python是如何做到的?任何想法,将不胜感激.谢谢.
注意:g1,g2等只是一些带增量的字符串.
解决方法:
由于您希望对输出进行排序,因此可以根据第一个元素对原始列表进行排序
>>> first = lambda x: x[0]
>>> one_sorted = sorted(one, key=first)
然后你可以根据第一个元素用itertools.groupby对元素进行分组,就像这样
groupby(one_sorted, first)
因为你想按照升序为这些组分配数字,你可以像这样用enumerate包装它
enumerate(groupby(one_sorted, first), 1)
然后你可以unpack在for循环中枚举的结果,就像这样
for index, (item, group) in enumerate(groupby(one_sorted, first), 1)
现在你只需要构造结果列表.您可以使用list comprehension来执行此操作,就像这样
>>> from itertools import groupby
>>> [(index, item, [j[1] for j in group])
... for index, (item, group) in enumerate(groupby(one_sorted, first), 1)]
[(1, 2, ['c']), (2, 3, ['b', 'd']), (3, 4, ['a']), (4, 5, ['e']), (5, 6, ['f'])]
[j [1] for j in group]实际上迭代分组的项目并获取第二个项目,即实际的字符串.
或者,您可以将字符中的元素分组,如下所示
>>> groups = {}
>>> for number, string in one:
... groups.setdefault(number, []).append(string)
...
...
>>> groups
{2: ['c'], 3: ['b', 'd'], 4: ['a'], 5: ['e'], 6: ['f']}
然后返回在排序字典上应用枚举,就像这样
>>> [(index, number, groups[number])
... for index, number in enumerate(sorted(groups), 1)]
[(1, 2, ['c']), (2, 3, ['b', 'd']), (3, 4, ['a']), (4, 5, ['e']), (5, 6, ['f'])]
内容总结
以上是互联网集市为您收集整理的python – 如何按排序顺序对列表中的项进行分组?全部内容,希望文章能够帮你解决python – 如何按排序顺序对列表中的项进行分组?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。