字典(dict)

4.7 字典(dict)

字典是Python中一种非常重要的数据类型。字典和之前的列表、元组不同,里面的元素使用键-值对进行存储。通常字典中元素的由字符串或数字等可哈希数据类型组成。
可以把字典想象成一个集合,只不过每个元素都是由键-值对组成。字典中的元素的键是不能重复的。字典中的元素也是无序的,这点和集合一样。
可以通过键获取集合中元素的值,并且速度要远快于列表。这种速度上的差异在数据量特别大时更加明显。

4.7.1 字典的创建

4.7.1.1 通过字典标识符号创建

列表在创建的时候用{}做标识。内部的元素用逗号进行分隔。注意:字典和集合都是用{}做标识的。
>>> dct1 = {} # 空字典
>>> dct2 = {'a': 1, 'b': 2} # 字典中存放了2个元素
>>> dct3 = {'小明': 20, '小芳': 18} # 字典中存放了2个元素
>>> dct4 = {[1]: 2} # 尝试用不可哈希数据类型(列表)作为键导致报错

Traceback (most recent call last):
File "C:\Program Files\Python3102\lib\code.py", line 90, in runcode
exec(code, self.locals)
File "", line 1, in
TypeError: unhashable type: 'list'

4.7.1.2 通过字典推导式创建

>>> dct = {i: i ** 2 for i in range(3)}
>>> dct

4.7.1.3 通过dict函数创建

>>> dict() # 空字典
>>> dict(a='a', b='b', c='c') # 通过关键字创建字典
>>> dict(zip(['one', 'two'], [1, 2])) # 通过映射函数方式创建字典
>>> dict([('one', 1), ('two', 2)]) # 通过可迭代对象创建字典

4.7.2 字典的访问

4.7.2.1 通过访问

>>> dct = {'one': 1, 'two': 2, 'three': 3}
>>> dct['two']

2

>>> dct['zero'] # 如果不存在,则会报错

Traceback (most recent call last):
File "C:\Program Files\Python3102\lib\code.py", line 90, in runcode
exec(code, self.locals)

4.7.2.2 遍历字典

参见可迭代对象的遍历
注意:遍历字典和其它遍历可迭代对象有所区别,遍历字典所得到的是字典的所有的元素的

dct = {'one': 1, 'two': 2, 'three': 3}
for i in dct:
	print(i)

one
two
three

4.7.2.3 成员资格检查

参见可迭代对象中的成员资格检查
注意:成员资格检查和其它可迭代对象有所区别,对于字典,是判断某个成员是否是字典的某个元素的

dct = {'one': 1, 'two': 2, 'three': 3}
print('one' in dct)
print('zero' in dct)

True
False

4.7.3 字典的修改

4.7.3.1 单个元素的修改

>>> dct = {'one': 1, 'two': 2, 'three': 3}
>>> dct['two'] = 22
>>> dct['two']

22

4.7.3.2 通过|得到更新后的字典

>>> dct = {'one': 1, 'two': 2, 'three': 3}
>>> dct2 = {'zero': 0, 'two': 22}
>>> dct3 = dct | dct2
>>> dct3

4.7.3.3 通过|=原地更新字典

>>> dct = {'one': 1, 'two': 2, 'three': 3}
>>> dct2 = {'zero': 0, 'two': 22}
>>> dct |= dct2
>>> dct

4.7.3.4 通过解包方式得到更新后的字典

>>> dct = {'one': 1, 'two': 2, 'three': 3}
>>> dct2 = {'zero': 0, 'two': 22}
>>> dct3 = {**dct, **dct2}
>>> dct3

4.7.4 字典的删除

4.7.4.1 删除某个元素

>>> dct = {'one': 1, 'two': 2, 'three': 3}
>>> del dct['two']
>>> dct['two'] # 删除元素后再次访问则会报错

Traceback (most recent call last):
File "C:\Program Files\Python3102\lib\code.py", line 90, in runcode
exec(code, self.locals)
File "", line 1, in
KeyError: 'two'

4.7.4.2 删除整个字典

>>> dct = {'one': 1, 'two': 2, 'three': 3}
>>> del dct
>>> dct # 删除字典后再次访问则会报错

Traceback (most recent call last):
File "C:\Program Files\Python3102\lib\code.py", line 90, in runcode
exec(code, self.locals)
File "", line 1, in
NameError: name 'dct' is not defined. Did you mean: 'dct1'?

4.7.5 字典的方法

4.7.5.1 添加元素

4.7.5.1.1 dict.update(dict2)

描述
把字典dict2的键/值对更新到dict里
示例
>>> dct = {'one': 1, 'two': 2, 'three': 3}
>>> dct2 = {'zero': 0, 'two': 22}
>>> dct.update(dct2)
>>> dct

4.7.5.2 删除元素

4.7.5.2.1 clear()

描述
清空字典(删除字典中所有的元素)
示例
>>> dct = {'one': 1, 'two': 2, 'three': 3}
>>> dct.clear()
>>> dct

{}

4.7.5.2.2 pop(key[,default])

描述
返回并删除字典中key这个键对应的值,如果键不存在,则返回default作为提示信息,如果没有设置default,则会引发KeyError异常。
示例
>>> dct = {'one': 1, 'two': 2, 'three': 3}
>>> dct.pop('one')

1

>>> dct

>>> dct.pop('zero', '没有这个key')

'没有这个key'

>>> dct.pop('zero')

Traceback (most recent call last):
File "C:\Program Files\Python3102\lib\code.py", line 90, in runcode
exec(code, self.locals)
File "", line 1, in
KeyError: 'zero'

4.7.5.2.3 popitem()

描述
返回并删除字典中的最后一对键和值。
示例
>>> dct = {'one': 1, 'two': 2, 'three': 3}
>>> dct.popitem()

('three', 3)

>>> dct

4.7.5.3 查询统计类

4.7.5.3.1 get(key, default=None)、setdefault(key, default=None)

描述
返回(设置)指定键的值,如果键不在字典中返回(设置)default设置的默认值。
示例
>>> dct = {'one': 1, 'two': 2, 'three': 3}
>>> dct.get('one')
>>> dct.get('zero')
>>> dct.get('zero', 0)

1
None
0

注意:
1、如果指定的存在,则get或者setdefault都是获取到这个的值。
2、如果指定的不存在,则get直接返回default指定的值。而setdefault不但返回default指定的值还会修改字典的内容。
示例
>>> dct = {'one': 1, 'two': 2, 'three': 3}
>>> dct.get('zero', 0)

0

>>> dct

>>> dct.setdefault('zero', 0)

0

>>> dct

4.7.5.3.2 keys()、values()

描述
返回字典所有的(值),注意返回的结果是dict_keys和dict_values类型的数据。可以通过for循环获取里面的元素,也可以通过list或者tuple转换成列表或元组。
示例
>>> dct = {'one': 1, 'two': 2, 'three': 3}
>>> dct.keys()

dict_keys(['one', 'two', 'three'])

4.7.5.3.3 items()

描述
返回字典所有的键-值,注意返回的结果是dict_items类型的数据。可以通过for循环获取里面的元素,也可以通过list或者tuple转换成列表或元组。
示例
>>> dct = {'one': 1, 'two': 2, 'three': 3}
>>> dct.items()

dict_items([('one', 1), ('two', 2), ('three', 3)])

4.7.5.4 其它类

4.7.5.4.1 copy()

描述
返回一个字典的浅复制
示例
>>> dct = {'one': 1, 'two': 2, 'three': 3}
>>> dct2 = dct.copy()
>>> dct2

4.7.5.4.2 fromkeys(seq, val)

描述
创建一个新的字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值,如果没有提供val则所有键的值默认为None。
示例
>>> dct = {'one': 1, 'two': 2, 'three': 3}
>>> dct2 = dct.fromkeys('abc')
>>> dct3 = dct.fromkeys('abc', 123)
>>> dct2
>>> dct3

4.7.6 字典的应用

4.7.6.1 将字符串格式设置功能用于字典

在之前的学习中,我们知道了可以通过format的方式对字符串进行格式化。这里介绍一种更加简单易用的方式,那就是通过format_map来实现对字符串的格式化。
format_map可以让我们通过一个字典映射来对字符串进行格式化。
>>> phonebook = {'Beth': '9102', 'Alice': '2341', 'Cecil': '3258'}
>>> "Cecil's phone number is {Cecil}.".format_map(phonebook)

"Cecil's phone number is 3258."

在模板系统中,这种字符串格式设置方式很有用(下面的示例使用的是HTML)。
>>> template = '''
>>> ... {title}
>>> ...
>>> ...

{title}

>>> ...

{text}

>>> ... '''
>>> data = {'title': 'My Home Page', 'text': 'Welcome to my home page!'}
>>> template.format_map(data)

<html>
<head><title>My Home Page</title></head>
<body>
<h1>My Home Page</h1>
<p>Welcome to my home page!</p>
</body>

4.7.6.2 字典排序

字典其实是一种无序的数据,但是有时候又希望字典能够按照一定的顺序一遍我们能够输出或者查看。这时就需要对字典进行排序了。

4.7.6.2.1 根据key排序
dct = {'one': 1, 'two': 2, 'three': 3}
for k in sorted(dct):
    print(k, dct[k])

one 1
three 3
two 2

4.7.6.2.2 根据value排序
dct = {'one': 1, 'two': 2, 'three': 3, 'zero': 0}
for k in sorted(dct, key=dct.__getitem__):
    print(k, dct[k])

zero 0
one 1
two 2
three 3

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:字典(dict) - Python技术站

(0)
上一篇 2023年4月2日 下午5:10
下一篇 2023年4月2日

相关文章

  • Python复合语句

    3.6 Python复合语句 复合语句是包含其它语句(语句组)的语句;它们会以某种方式影响或控制所包含其它语句的执行。通常,复合语句会跨越多行,虽然在某些简单形式下整个复合语句也可能包含于一行之内。if、while和for语句用来实现传统的控制流程构造。try语句为一组语句指定异常处理和/和清理代码,而with语句允许在一个代码块周围执行初始化和终结化代码。…

    Python开发 2023年4月2日
    00
  • 集合(set)

    4.6 集合(set) 集合是由不重复元素组成的无序容器。集合中的元素不能重复,即使向集合中再添加同样的元素,也只会保留一个。由于集合的这种特性,所以一般可以用集合进行去重。集合中不能添加可变对象(不可哈希),因为无法判断两个可变对象是否相同,也就无法保证集合的内部不会有重复元素。集合中的元素是无序的,我们通过print可以显示集合内的元素,但是显示的结果并…

    Python开发 2023年4月2日
    00
  • 使用pip管理库

    2.5 使用pip管理库 安装Python后会默认安装pip工具,该工具可以用来安装、升级和移除库。默认情况下 pip 将从[Python Package Index]https://pypi.org 处下载安装软件包。pip 有许多子命令: “install”, “uninstall”, “freeze” 等等。下面我们来介绍一些比较重要且实用的pip命令…

    Python开发 2023年4月2日
    00
  • 类和类的定义

    6.2 类和类的定义 面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如学生类,而实例是根据类创建出来的一个个具体的对象,每个对象都拥有相同的方法,但各自的数据可能不同。 6.2.1 什么是类 当你在马路上看到一辆飞驰的奥迪汽车时,这辆奥迪车就是汽车类的一个实例。汽车就是一个类,每辆车都是汽车类的一个实例。可以将…

    Python开发 2023年3月31日
    00
  • Python函数的参数

    5.3 函数参数 示例2中定义的函数虽然能够计算总分数,但是每次计算后的结果是固定的,为了增加函数的灵活性,我们希望在调用函数的时候可以传入一些数据,然后根据传入的数据进行计算。要满足这种需求,就需要在定义函数的时候定义参数。 5.3.1 形参和实参 在编程语言中,函数定义使用的是形参,调用时传入的是实参。形参(parameter),全称为形式参数,不是实际…

    Python开发 2023年4月2日
    00
  • Python特性

    3.1 Python特性 Python是为可读性设计的,与英语有一些相似之处,并受到数学的影响。比如: Python使用新行来完成命令,而不像通常使用分号或括号的其他编程语言。 Python依赖缩进,使用空格来定义范围;例如循环、函数和类的范围。其他编程语言通常使用花括号或关键字来实现此目的。 Python中没有单个字符,单字符被认为是1个字符的字符串。 对…

    Python开发 2023年4月2日
    00
  • 类方法和对象方法

    6.4 类方法和对象方法 方法的本质其实就是函数,在模块中定义就是函数,在类中定义就是类的方法。方法按照归属分类一般有3种:对象方法、类方法、静态方法。 6.4.1 对象方法 class Person: cls_attr = ‘我是类属性’ def __init__(self): self.obj_attr = ‘我是对象属性’ def eat(self):…

    Python开发 2023年3月31日
    00
  • Python变量

    4.10 Python变量 4.10.1 变量介绍 变量,顾名思义,就是可以变化的量。变量的概念基本上和初中代数的方程变量是一致的,只是在计算机程序中,变量不仅可以是数字,还可以是任意数据类型。Python中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。在 Python中,变量就是变量,它没有类型,我们所说的类型是变量所指的内存…

    Python开发 2023年4月2日
    00
合作推广
合作推广
分享本页
返回顶部