自我实现的方式是使用for循环,并添加到所需的结构中。
您还可以使用标准库中的模块
itertools.groupby
,
当输入被排序时
(之前)。
分组
from itertools import groupby
lst = [
{'Amount': 13.5, 'Name': 'Amy', 'date': '2022-01-30'},
{'Amount': 15, 'Name': 'Bob', 'date': '2022-01-30'},
{'Amount': 13.5, 'Name': 'Cara', 'date': '2022-01-31'}
]
keyfunc = lambda x: x['date'] # extracting the key for sort and group
groups = []
uniquekeys = []
data = sorted(lst, key=keyfunc) # required for groupby
for k, g in groupby(data, keyfunc):
groups.append({'date': k, 'details': list(g)}) # Store group iterator as a list
uniquekeys.append(k)
print(groups)
印刷品:
[{'date': '2022-01-30', 'details': [{'Amount': 13.5, 'Name': 'Amy', 'date': '2022-01-30'}, {'Amount': 15, 'Name': 'Bob', 'date': '2022-01-30'}]}, {'date': '2022-01-31', 'details': [{'Amount': 13.5, 'Name': 'Cara', 'date': '2022-01-31'}]}]
取下钥匙
自从你的输出在
details
不只是一个分组列表,而是删除了键(用于分组方式),我们需要进行一些调整:
from itertools import groupby
lst = [
{'Amount': 13.5, 'Name': 'Amy', 'date': '2022-01-30'},
{'Amount': 15, 'Name': 'Bob', 'date': '2022-01-30'},
{'Amount': 13.5, 'Name': 'Cara', 'date': '2022-01-31'}
]
keyfunc = lambda x: x['date'] # extracting the key for sort and group
groups = []
data = sorted(lst, key=keyfunc) # required for groupby
for k, g in groupby(data, keyfunc):
# remove the key from grouped list
removed_key = []
for v in list(g):
del v['date']
removed_key.append(v)
# add to groups
groups.append({'date': k, 'details': removed_key})
print(groups)
所需打印:
[{'date': '2022-01-30', 'details': [{'Amount': 13.5, 'Name': 'Amy'}, {'Amount': 15, 'Name': 'Bob'}]}, {'date': '2022-01-31', 'details': [{'Amount': 13.5, 'Name': 'Cara'}]}]