python - 对列表中的数据进行分组
问题描述
我现在正在学习 python,我正在尝试对列表中的数据进行分组
raw_list = [
['item3', [10, 10, 1]],
['item4', [10, 10, 2]],
['item7', [10, 10, 2]],
['item8', [10, 10, 2]],
['item2', [10, 10, 3]],
['item5', [10, 10, 4]],
['item1', [10, 10, 20]],
['item6', [10, 10, 20]],
['item9', [10, 10, 20]]
]
我正在尝试按嵌套列表中的第三个数字(1、2、3、4、20)进行分组:
group = [
[
['item3', [10, 10, 1]]
],
[
['item4', [10, 10, 2]],
['item7', [10, 10, 2]],
['item8', [10, 10, 2]]
],
[
['item2', [10, 10, 3]]
],
[
['item5', [10, 10, 4]]
],
[
['item1', [10, 10, 20]],
['item6', [10, 10, 20]],
['item9', [10, 10, 20]]
]
]
我的代码:
raw_list.sort(key=lambda x: x[1][2])
group_list = list(i for i in itertools.groupby(raw_list, lambda x: x[1][2]))
print(group_list)
我认为它几乎可以工作,但我无法获得每个组的列表,因为它返回:
[(1, <itertools._grouper object at 0x019AB7D8>), (2, <itertools._grouper object at 0x019B8430>), (3, <itertools._grouper object at 0x019B8730>), (4, <itertools._grouper object at 0x039E1F10>), (20, <itertools._grouper object at 0x039E1F70>)]
解决方案
你真的很亲近。itertools.groupby
产生形式为(key, group)
wheregroup
是迭代器的元组。如果您将每个项目转换group
为列表,您将拥有您想要的。
raw_list.sort(key=lambda x: x[1][2])
# Notice the change in the list comprehension
group_list = [list(g) for _, g in itertools.groupby(raw_list, lambda x: x[1][2])]
print(group_list)
输出以下列表(然后我对其进行了格式化)
[
[
['item3', [10, 10, 1]]
],
[
['item4', [10, 10, 2]],
['item7', [10, 10, 2]],
['item8', [10, 10, 2]]
],
[
['item2', [10, 10, 3]]
],
[
['item5', [10, 10, 4]]
],
[
['item1', [10, 10, 20]],
['item6', [10, 10, 20]],
['item9', [10, 10, 20]]
]
]
推荐阅读
- python - 如何在 python 中将 N 个显示的数组(每个数组在视觉上类似于 PNG)转换为 mp4?
- python - 如何在 Python 中删除重复打印?
- linux - 当 intel_iommu=on 时 Linux DMA 32 位 dma_alloc_coherent 错误行为
- java - 转换字符串时的 Java 代码效率
- javascript - 最小化浏览器重绘:javascript中最简单的交集代码不起作用
- python - 循环数据帧时的效率提高
- c++ - 如何自定义可以使用时间戳的 QSlider?
- c# - 使用键盘上的标签按钮时,标签页不会获得焦点
- javascript - 不能在类组件中调用 React Hook “useState”。必须在 React 函数组件或自定义 React Hook 函数中调用 React Hooks
- android - 如何在kotlin中通过retrofit2获取json