网站建设都讲哪些内容,网站制作公司有哪些证,从事网络销售都有哪些平台呢,软件工程专业介绍字典#xff08;dictionary#xff09;是Python中一种常用的数据类型。不同于其他由数字索引的序列#xff0c;字典是用键#xff08;key#xff09;来索引的。通常表示为dict(key: val, ...)#xff0c;有以下特征#xff1a; 键可以是任何不可变#xff… 字典dictionary是Python中一种常用的数据类型。不同于其他由数字索引的序列字典是用键key来索引的。通常表示为dict(key: val, ...)有以下特征 键可以是任何不可变immutable数据类型如数字字符串和仅包含不可变数据类型的元组每个键必须是唯一的字典中每一项的顺序是任意的1. KeyError异常 在Python中如果访问字典里不存在的键会出现KeyError异常。有些时候字典中每个键都存在默认值是很方便的例如下面的例子 bag [apple, orange, cherry, apple,
... apple, cherry, blueberry}]count {}for fruit in bag:
... count[fruit] 1
...
Traceback (most recent call last):File stdin, line 2, in module
KeyError: apple上例统计列表bag中单词出现次数并记录在字典count中。单词没出现一次count中对应的键值会增加一。但是在实习运行代码时每当单词第一次被统计就会出现KeyError异常这是因为它并不在字典count中Python中dict对象并不存在默认值。 2. 使用判断语句检查 因此在单词第一次被统计时需要在count中给每个键设定一个默认值1这可以用一个判断语句来实现 for fruit in bag:
... if fruit not in count: #如果不存在添加
... count[fruit] 1
... else:
... count[fruit] 1
...count
{apple: 3, blueberry: 1, orange: 1, cherry: 2}3. 使用dict.setdefault()方法 dict.setdefault(key[,default])方法接受两个参数第一个是键的名称第二个参数是默认值。在调用时如果键存在字典中会返回它的值如果不存在则会自动把它添加进字典中并返回默认值default的默认值为None。此外default的值还可以是列表元组集合和字典等。 d {a: 1, b: 2}d.setdefault(a) #键存在并返回他的值
1d.setdefault(c, 3) #添加键-值
3d.setdefault(d) #只添加键默认值为Noned
{a: 1, b: 2, c: 3, d: None}接下来用它来实现上一个例子 count {}for fruit in bag:
... count.setdefault(fruit, 0)
... count[fruit] 1
...count
{apple: 3, orange: 1, cherry: 2, blueberry: 1}或者更简洁一些 for fruit in bag:
... count[fruit] count.setdefault(fruit, 0) 14. 使用collections.defaultdict类 class collections.defaultdict([default_factory[, ...]]) defaultdict是Python内建dict类的一个子类第一个参数为default_factory属性提供初始值默认为None。它覆盖一个方法并添加一个可写实例变量。它的其他功能与dict相同但会为一个不存在的键提供默认值从而避免KeyError异常。之前例子的实现如下 from collections import defaultdictcount defaultdict(int)for fruit in bag:
... count[fruit] 1
...count
defaultdict(class int, {apple: 3, orange: 1, cherry: 2, blueberry: 1}) 4.1. 类型名称作为初始化函数参数 首先它可以接受类型名称来作为初始化函数的参数比如之前的例子中以int类名称作为参数。除了标准dict操作它还支持__missing__(key)方法通过参考官方文档它的机制如下 如果default_factory为None会抛出以key为参数的KeyError异常。 d defaultdict() #default_factory为Noned[eric]
Traceback (most recent call last):File stdin, line 1, in module
KeyError: eric 如果default_factory不为None 此处原文为 It is called without arguments to provide a default value for the given key, this value is inserted in the dictionary for the key, and returned.。大概翻译了下它会在不接收任何参数的情况下被调用来为给定的键提供默认值这个值会被添加进字典并被返回。 d defaultdict(list) #default_factory是列表名称d[eric] #访问一个不存在的键
[] #添加并返回默认值一个空列表d
defaultdict(class list, {eric: []})因为defaultdict是dict的一个子类事实上访问一个不存在的键时dict类中的__getitem__方法会调用子类中__missing__()方法但它不能直接被dict的实例调用并且返回或抛出__missing__()方法所返回的值和抛出的异常。因此如果调用default_factory引发一个异常该异常传播不变propagated unchanged。 请注意除__getitem__()之外的任何操作都不会调用__missing __()。 这意味着像正常的字典一样get()将返回None作为默认值而不是使用default_factory。 另外还可以给字典中的键映射多个值具体方法是把多个值储存在另一个容器里如列表元组字典等。是否使用列表或集合的选择取决于预期用途使用列表来保存每一项的插入顺序如果要消除重复的项不关心顺序可以使用元组。 from collections import defaultdictd defaultdict(list)for i in [1,2,3]:
... d[eric].append(i)
...d
defaultdict(class list, {eric: [1, 2, 3]}) d[amy] {}d[amy][a] 1d
defaultdict(class list, {eric: [1, 2, 3], amy: {a: 1}})可以看出给定默认值的类型之后并不意味着字典中所有值都必须是此类型也可以是其他类型。还能使用相应的方法来对行操作如列表的append和pop等方法。 4.2. 可调用函数作为初始化函数参数 除了接受类型名称作为初始化函数的参数之外还可以使用任何不带参数的可调用函数并以该函数返回值作为默认值。例如定义函数zero()让默认值为0 from collections import defaultdictdef zero():
... return 0
...d defaultdict(zero)d[eric]
0d
defaultdict(function zero at 0x100662e18, {eric: 0})或者使用lambda函数 d defaultdict(lambda: 0)d[amy]
0d
defaultdict(function lambda at 0x1019d3d90, {amy: 0})需要注意的是 defaultdict接受的参数必须是可调用的。若直接传递数字0就会出现TyptError的异常。 d defaultdict(0)
Traceback (most recent call last):File stdin, line 1, in module
TypeError: first argument must be callable or None声明 文章仅供学习及参考禁止转载。 参考 Python3.6: defaultdictPython中defaultdict方法的使用