返回

数据分组:巧用字典setdefault方法焕发优雅##

后端

从字典说起

当我们需要对数据进行分组时,首先想到的可能是构建一个字典:

data = [
    {'name': 'Alice', 'age': 20},
    {'name': 'Bob', 'age': 25},
    {'name': 'Charlie', 'age': 30},
    {'name': 'Dave', 'age': 25},
    {'name': 'Eve', 'age': 35},
]

ages = {}
for person in data:
    age = person['age']
    if age not in ages:
        ages[age] = []
    ages[age].append(person)

这种方案完全没有问题,但我们还可以写的更优雅一些,也就是使用字典的setdefault方法:

data = [
    {'name': 'Alice', 'age': 20},
    {'name': 'Bob', 'age': 25},
    {'name': 'Charlie', 'age': 30},
    {'name': 'Dave', 'age': 25},
    {'name': 'Eve', 'age': 35},
]

ages = {}
for person in data:
    age = person['age']
    ages.setdefault(age, []).append(person)

setdefault方法的妙用

setdefault方法接受两个参数:键和默认值。如果键不存在,则将默认值插入字典并返回默认值;如果键存在,则返回键对应的值。

在上面的代码中,我们使用setdefault方法来获取age对应的列表。如果age不存在,则创建一个新的列表并将其作为默认值插入字典;如果age存在,则返回age对应的列表。

使用setdefault方法的好处是,它使代码更简洁易读。我们不必再使用if语句来判断键是否存在,也不必再使用append方法来向列表中添加元素。

更进一步:分组统计

除了简单的分组之外,我们还可以使用setdefault方法来进行分组统计。例如,我们可以统计每个年龄段的人数:

data = [
    {'name': 'Alice', 'age': 20},
    {'name': 'Bob', 'age': 25},
    {'name': 'Charlie', 'age': 30},
    {'name': 'Dave', 'age': 25},
    {'name': 'Eve', 'age': 35},
]

ages = {}
for person in data:
    age = person['age']
    ages.setdefault(age, 0)
    ages[age] += 1

print(ages)

输出:

{20: 1, 25: 2, 30: 1, 35: 1}

结语

字典的setdefault方法是一个非常有用的工具,可以使我们的代码更简洁易读。在数据处理中,我们可以使用setdefault方法来进行分组、分组统计等操作。

希望这篇文章对您有所帮助!