按多个键进行分组的逻辑可以使用Python中的itertools.groupby
函数来实现。下面是一个示例代码:
from itertools import groupby
# 定义一个待分组的数据列表
data = [
{'name': 'Alice', 'age': 25, 'city': 'New York'},
{'name': 'Bob', 'age': 30, 'city': 'San Francisco'},
{'name': 'Charlie', 'age': 35, 'city': 'New York'},
{'name': 'Dave', 'age': 40, 'city': 'San Francisco'},
{'name': 'Eve', 'age': 45, 'city': 'New York'}
]
# 定义一个分组的键列表
keys = ['city', 'age']
# 按多个键进行分组
data.sort(key=lambda x: [x[key] for key in keys])
groups = groupby(data, key=lambda x: [x[key] for key in keys])
# 打印分组结果
for key, group in groups:
print(key)
for item in group:
print(item)
print('---')
在上面的示例中,我们有一个待分组的数据列表data
,以及一个分组的键列表keys
。我们使用sort
函数对数据列表进行排序,排序的依据是每个数据字典中的键值按照keys
列表中的顺序组成的列表。然后,我们使用groupby
函数对排序后的数据进行分组,分组的依据是每个数据字典中的键值按照keys
列表中的顺序组成的列表。最后,我们通过遍历分组结果,打印每个分组的键和对应的数据项。
上述示例中的输出结果为:
['New York', 25]
{'name': 'Alice', 'age': 25, 'city': 'New York'}
['New York', 35]
{'name': 'Charlie', 'age': 35, 'city': 'New York'}
['New York', 45]
{'name': 'Eve', 'age': 45, 'city': 'New York'}
['San Francisco', 30]
{'name': 'Bob', 'age': 30, 'city': 'San Francisco'}
['San Francisco', 40]
{'name': 'Dave', 'age': 40, 'city': 'San Francisco'}
---
可以看到,数据按照city
和age
键进行了分组,并且每个分组内的数据项也按照对应的键值进行了排序。
上一篇:按多个键将数组对象分组和扁平化
下一篇:按多个开头字母对国家进行排序