返回
数据分组:巧用字典setdefault方法焕发优雅##
后端
2023-10-05 11:31:18
从字典说起
当我们需要对数据进行分组时,首先想到的可能是构建一个字典:
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方法来进行分组、分组统计等操作。
希望这篇文章对您有所帮助!