以下是一个示例代码,演示如何按多个动态键将字典列表进行分组:
from itertools import groupby
def group_by_keys(data, keys):
# 对数据进行排序,以确保按照指定的键进行分组
data.sort(key=lambda x: [x[key] for key in keys])
grouped_data = []
for key, group in groupby(data, key=lambda x: [x[key] for key in keys]):
grouped_data.append(list(group))
return grouped_data
# 示例数据
data = [
{"name": "Alice", "age": 25, "city": "New York"},
{"name": "Bob", "age": 30, "city": "New York"},
{"name": "Charlie", "age": 35, "city": "Los Angeles"},
{"name": "David", "age": 25, "city": "Los Angeles"},
{"name": "Eve", "age": 30, "city": "New York"},
]
# 按照城市和年龄进行分组
keys = ["city", "age"]
result = group_by_keys(data, keys)
print(result)
该示例中,我们定义了一个group_by_keys
函数,接受一个字典列表data
和一个包含要按照的键的列表keys
作为参数。首先,我们对数据进行排序,以确保按照指定的键进行分组。然后,我们使用groupby
函数将数据分组,并将结果添加到grouped_data
列表中。最后,我们返回分组后的数据。
在示例数据中,我们按照城市和年龄进行分组。运行代码后,将输出如下结果:
[[{'name': 'Alice', 'age': 25, 'city': 'New York'}, {'name': 'Bob', 'age': 30, 'city': 'New York'}, {'name': 'Eve', 'age': 30, 'city': 'New York'}], [{'name': 'Charlie', 'age': 35, 'city': 'Los Angeles'}, {'name': 'David', 'age': 25, 'city': 'Los Angeles'}]]
可以看到,字典列表已按照指定的键进行了分组。第一个分组包含三个字典,它们的城市和年龄都是"New York"和25或30。第二个分组包含两个字典,它们的城市是"Los Angeles",年龄是25或35。
上一篇:按多个大写字母拆分文本