ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

字典(dict)

2022-08-20 14:34:09  阅读:231  来源: 互联网

标签:4.7 three two zero dict dct 字典


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

{0: 0, 1: 1, 2: 4}

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

{'one': 1, 'two': 22, 'three': 3, 'zero': 0}

4.7.3.3 通过|=原地更新字典

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

{'one': 1, 'two': 22, 'three': 3, 'zero': 0}

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

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

{'one': 1, 'two': 22, 'three': 3, 'zero': 0}

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

{'one': 1, 'two': 22, 'three': 3, 'zero': 0}

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

{'two': 2, 'three': 3}

>>> 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

{'one': 1, 'two': 2}

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

{'one': 1, 'two': 2, 'three': 3}

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

0

>>> dct

{'one': 1, 'two': 2, 'three': 3, 'zero': 0}

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

{'one': 1, 'two': 2, 'three': 3}

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

{'a': None, 'b': None, 'c': None}
{'a': 123, 'b': 123, 'c': 123}

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

标签:4.7,three,two,zero,dict,dct,字典
来源: https://www.cnblogs.com/sibide/p/16390614.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有