python 字典defaultdict(list)

假如有需求,

data = [("p", 1), ("p", 2), ("p", 3),
        ("h", 1), ("h", 2), ("h", 3)]
要转换成
result = {'p': [1, 2, 3], 'h': [1, 2, 3]}

我的第一想法就是这么做

result = {}
for (key, value) in data:
    if key in result:
        result[key].append(value)
    else:
        result[key] = [value]

师傅看了之后笑了,扔来一段

result = {}
data = [("p", 1), ("p", 2), ("p", 3),
        ("h", 1), ("h", 2), ("h", 3)]
for (key, value) in data:
    result.setdefault(key, []).append(value)
print(result)#'p': [1, 2, 3], 'h': [1, 2, 3]}

 setderault()方法接收两个参数,用法和get类似,但比get强大,它可以给字典的key设定一个默认值(如果key不在字典中的时候),

defaultdict(list),会构建一个默认value为list的字典,

from collections import defaultdict
result = defaultdict(list)
data = [("p", 1), ("p", 2), ("p", 3),
        ("h", 1), ("h", 2), ("h", 3)]

for (key, value) in data:
    result[key].append(value)
print(result)#defaultdict(<class 'list'>, {'p': [1, 2, 3], 'h': [1, 2, 3]})

 

### Python `collections.defaultdict` 使用方法 `defaultdict` 是 Python 中的一个字典子类,它通过提供默认工厂函数来简化初始化过程。当访问不存在的键时,默认会调用该工厂函数并返回其结果作为默认值。 以下是有关 `defaultdict(list)` 的详细说明以及一个实际的例子: #### 创建和使用 `defaultdict(list)` `defaultdict(list)` 可用于自动创建列表类型的值。每当尝试访问一个尚不存在的键时,`defaultdict` 会自动生成一个新的空列表并与该键关联[^1]。 ```python from collections import defaultdict # 初始化 defaultdict 并指定 list 作为默认工厂函数 dd = defaultdict(list) # 添加元素到 defaultdict 中 dd['fruits'].append('apple') dd['fruits'].append('banana') print(dd) # 输出: defaultdict(<class 'list'>, {'fruits': ['apple', 'banana']}) ``` 上述代码展示了如何利用 `defaultdict(list)` 来存储多个值对应同一个键的情况。如果直接使用普通的字典,则需要手动检查键是否存在再决定是否初始化为空列表[^2]。 #### 实际应用案例:读取文件中的多列数据 假设有一个 CSV 文件,其中每行代表一种水果及其数量。可以使用 `defaultdict(list)` 将相同种类的水果的数量收集起来。 ```python import csv from collections import defaultdict def read_csv_to_dict(file_path): result = defaultdict(list) with open(file_path, mode='r') as file: reader = csv.reader(file) for row in reader: fruit_name, quantity = row result[fruit_name].append(int(quantity)) return result file_data = read_csv_to_dict('fruits.csv') print(file_data) ``` 在这个例子中,程序打开名为 `fruits.csv` 的文件,并将其内容按照行解析成键值对形式存入 `defaultdict(list)` 结构之中。 #### 总结 - 当处理可能重复出现的数据项时,`defaultdict(list)` 提供了一种优雅的方式来管理这些数据集合。 - 它避免了显式的存在性检测逻辑,从而让代码更加简洁易懂。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值