📅  最后修改于: 2023-12-03 15:10:08.656000             🧑  作者: Mango
在 Python 中,经常需要对列表进行分组操作。本文将介绍不同方法对列表进行分组操作,并对各种方法进行比较和总结。
使用 for 循环最为直观,也是最为灵活的方法,可以同时实现分组和排序操作。
data = [
{"name": "Tom", "age": 18, "group": "A"},
{"name": "Jerry", "age": 19, "group": "B"},
{"name": "Lily", "age": 20, "group": "A"},
{"name": "Lucy", "age": 21, "group": "B"},
]
result = {}
for item in data:
if item["group"] not in result:
result[item["group"]] = []
result[item["group"]].append(item)
for group, items in result.items():
print(group)
for item in items:
print(" ", item)
输出结果为:
A
{'name': 'Tom', 'age': 18, 'group': 'A'}
{'name': 'Lily', 'age': 20, 'group': 'A'}
B
{'name': 'Jerry', 'age': 19, 'group': 'B'}
{'name': 'Lucy', 'age': 21, 'group': 'B'}
itertools.groupby 函数是 Python 内置函数,可以方便地对列表进行分组操作。但是需要注意的是,groupby 函数在分组之前需要将列表进行排序。
from itertools import groupby
data = [
{"name": "Tom", "age": 18, "group": "A"},
{"name": "Jerry", "age": 19, "group": "B"},
{"name": "Lily", "age": 20, "group": "A"},
{"name": "Lucy", "age": 21, "group": "B"},
]
data.sort(key=lambda x: x["group"])
result = {}
for group, items in groupby(data, key=lambda x: x["group"]):
result[group] = list(items)
for group, items in result.items():
print(group)
for item in items:
print(" ", item)
输出结果与上一方法相同。
使用 defaultdict 类可以避免在进行分组操作时使用 if 判断,所以代码更加简洁。
from collections import defaultdict
data = [
{"name": "Tom", "age": 18, "group": "A"},
{"name": "Jerry", "age": 19, "group": "B"},
{"name": "Lily", "age": 20, "group": "A"},
{"name": "Lucy", "age": 21, "group": "B"},
]
result = defaultdict(list)
for item in data:
result[item["group"]].append(item)
for group, items in result.items():
print(group)
for item in items:
print(" ", item)
输出结果与上一方法相同。
以上三种方法对列表进行分组操作的功能基本相同,但是使用 defaultdict 类实现更为简洁,for 循环实现更为灵活。
在性能方面,for 循环实现的方法最为高效,其次是 defaultdict 类实现的方法,最后是 itertools.groupby 函数实现的方法。其中,itertools.groupby 函数的性能比较低,因为它需要在使用之前对列表进行排序操作。
因此,建议选择使用 for 循环实现的方法,既可以实现分组操作,又不会影响性能。如果代码需要更为简洁,可以选择使用 defaultdict 类实现的方法。而使用 itertools.groupby 函数则不推荐,因为它需要进行排序操作,影响性能,并且代码实现较为复杂。