python defaultdict

 

from collections import defaultdict
#defaultdict 是dict的子类, 所以dict支持的function, defaultdict基本上都支持
#如果程序试图访问不存在的key的value的时候,dict会报key error
#但是defaultdict可以提供一个默认值(其实有default_factory属性,该属性所指定的函数负责为不存在的key来生成value

dict1 = {}
def test():
    return "helloworld"
defaultdict1 = defaultdict(test)
print(defaultdict1['shun']) # helloworld

defaultdict1 = defaultdict(int)
print(defaultdict1['shun']) # 0

print(dict1['shun']) # KeyError: 'shun'
from collections import defaultdict
#defaultdict 是dict的子类, 所以dict支持的function, defaultdict基本上都支持
#如果程序试图访问不存在的key的value的时候,dict会报key error
#但是defaultdict可以提供一个默认值(其实有default_factory属性,该属性所指定的函数负责为不存在的key来生成value

"""
有这样一个需求
程序中包含多个key-value 对数据,在这些kwy-value中有些key是重复的,程序希望对这些key-value对进行整理,
ke有对应一个list, 该list中包含这组数据中该key对应的所有value
"""

#方法1: 传统的dict 方法实现
list1 = [("name","guo"),("age",10),("age",11)]
dict1 = {}
for k , v in list1:
    #setdefault方法用于获取指定key对应的value
    dict1.setdefault(k,[]).append(v)
print(dict1["name"]) # ['guo']
print(dict1) #{'name': ['guo'], 'age': [10, 11]}

#方法2:使用defaultdict 方法实现
list1 = [("name","guo"),("age",10),("age",11)]
dict1 = {}
d = defaultdict(list)
for k , v in list1:
    d[k].append(v)
print(d["name"]) #['guo']
print(d) #defaultdict(<class 'list'>, {'name': ['guo'], 'age': [10, 11]})

 

posted @ 2023-02-05 17:17  朵朵奇fa  阅读(30)  评论(0编辑  收藏  举报