вход - это что-то вроде
[
{"name": "person 1", "age": 20, "type": "student"},
{"name": "person 2", "age": 19, "type": "worker"},
{"name": "person 3", "age": 30, "type": "student"},
{"name": "person 4", "age": 25, "type": "worker"},
{"name": "person 5", "age": 17, "type": "student"}
]
и желаемый результат при группировании по полю типа должен быть
[
[
{"name": "person 1", "age": 20, "type": "student"},
{"name": "person 3", "age": 30, "type": "student"},
{"name": "person 5", "age": 17, "type": "student"}
],
[
{"name": "person 2", "age": 19, "type": "worker"},
{"name": "person 4", "age": 25, "type": "worker"}
]
]
У меня есть следующий код, чтобы сделать это с itertools
from itertools import groupby
input = [
{"name": "person 1", "age": 20, "type": "student"},
{"name": "person 2", "age": 19, "type": "worker"},
{"name": "person 3", "age": 30, "type": "student"},
{"name": "person 4", "age": 25, "type": "worker"},
{"name": "person 5", "age": 17, "type": "student"}
]
input.sort(key=lambda x: x["type"])
output = [list(v) for k, v in groupby(input, key=lambda x: x["type"])]
, который дает результат правильно. Тем не менее, для большого количества данных я думаю, что использование панд должно быть более эффективным, но теперь кажется, что я не могу понять, как выполнить вышеупомянутое с пандами. Код, который у меня сейчас есть, несколько работает, но я не думаю, что он вообще эффективен.
import pandas as pd
input = [
{"name": "person 1", "age": 20, "type": "student"},
{"name": "person 2", "age": 19, "type": "worker"},
{"name": "person 3", "age": 30, "type": "student"},
{"name": "person 4", "age": 25, "type": "worker"},
{"name": "person 5", "age": 17, "type": "student"}
]
indexes = [list(v) for k, v in pd.DataFrame(input).groupby(["type"]).groups.items()]
output = [[input[y] for y in x] for x in indexes]
Я почти уверен, что приведенный выше код - очень неправильный способ использования функциональности pandas groupby, поэтому какая-нибудь помощь в том, как сделать это правильно? Спасибо.