9. 字典

125 阅读4分钟

一,概念理解

在寻常意义的理解中,说到字典可能就会想到新华字典、牛津字典等,字典比较重要的特性就是能通过一个明显的索引去找到对应的内容,如通过“zhao”这个注音去找到“找”这些字。Python的字典数据类型有类似的意思,只不过这次是把这种索引也作为一个值存放了起来。

1,具体含义

(1)字典由{}来包含内容 (2)字典包含内容的形式为键值对(key:value)的形式,每个键值对之间用逗号,隔开,如下

a = {'姓名': '张三', '年龄': 28}

2,特点

(1)可变,不是序列 (2)键需为不可变类型,如数字、字符串、元组;值无限制 (3)键重复会导致前面的值被覆盖;值可重复

二,创建字典

1,直接在空字典里面写键值对

a = {'姓名': '张三', '年龄': 28}
print(a)

输出为

{'姓名': '张三', '年龄': 28}

2,定义空字典,然后往里面加键值对

a = {}
a['姓名'] = '张三'
a['年龄'] = 28
print(a)

输出为

{'姓名': '张三', '年龄': 28}

3,把键作为关键字传入

a = dict(姓名="张三", 年龄=28)
print(a)

输出为

{'姓名': '张三', '年龄': 28}

4,利用可迭代对象

a = dict([("姓名", "张三"), ("年龄", 28)])
print(a)

输出为

{'姓名': '张三', '年龄': 28}

5,通过zip()把对应元素打包成元组

a = dict(zip(["姓名", "年龄"], ["张三", 28]))
print(a)

输出为

{'姓名': '张三', '年龄': 28}

6,利用类方法fromkeys()

dic1 = dict.fromkeys(("name", "age", "sex"))
print(dic1)
dic2 = dict.fromkeys(("name", "age", "sex"), "I
don't know!")
print(dic2)

输出为

{'name': None, 'age': None, 'sex': None}
{'name': "I don't know!", 'age': "I don't know!", 'sex': "I don't know!"}

三,相关内置函数

1,dict(**kwarg) / dict(mapping) / dict(iterable)

作用:创建一个字典并返回,可以是传入关键字、函数方式、可迭代对象来创建

2,zip(*iterables)

作用:传入可迭代对象,取出每个可迭代对象的第i个元素组成第i个元组,返回这些元组的迭代器

result1 = zip("abcd", "efgh")
print(list(result1))
result4 = zip("abcd")
print(list(result4))

输出为

[('a', 'e'), ('b', 'f'), ('c', 'g'), ('d', 'h')]
[('a',), ('b',), ('c',), ('d',)]

3,classmethod fromkeys(iterable[, value])

作用:创建一个新字典,以 iterable 的元素作为键,value 作为值(默认为None)

dic2 = dict.fromkeys(("name", "age", "sex"), "I don't know!")
print(dic2)

输出为

{'name': "I don't know!", 'age': "I don't know!", 'sex': "I don't know!"}

四,访问和修改字典

访问:类似索引访问的方法,只是把放索引的位置换成放key值,即可访问相关的value值 修改:类似索引修改的方法,只是把放索引的位置换成放key值,即可修改相关的value值,没有找到则新增此键值对

a = dict([("姓名", "张三"), ("年龄", 28)]))
print(a["姓名"])
a["姓名"] = "阿鸡"
print(a)

输出为

张三
{'姓名': '阿鸡', '年龄': 28}

五,字典的对象方法

1,查

(1)dict.keys() 作用:返回所作用字典的所有键的视图对象

怎么理解视图对象? 一种特殊的数据格式,就相当于一个投影,所以原字典内容变化时,对应的视图对象也可能发生变化

a = dict([("姓名", "张三"), ("年龄", 28)])
b = a.keys()
print(b)
print(list(b))

print("-----------------")

a["练习"] = "两年半"
print(b)
print(list(b))

输出为

dict_keys(['姓名', '年龄'])
['姓名', '年龄']
-----------------
dict_keys(['姓名', '年龄', '练习'])
['姓名', '年龄', '练习']

(2)dict.values() 作用:返回所作用字典的所有值的视图对象

a = dict([("姓名", "张三"), ("年龄", 28)])
b = a.values()
print(b)
print(list(b))

print("-----------------")

a["姓名"] = "阿鸡"
print(b)
print(list(b))

输出为

dict_values(['张三', 28])
['张三', 28]
----------------
dict_values(['阿鸡', 28])
['阿鸡', 28]

(3)dict.items() 作用:返回返回所作用字典的所有键值对的视图对象

a = dict([("姓名", "张三"), ("年龄", 28)])
b = a.items()
print(b)
print(list(b))

print("-----------------")

a["姓名"] = "阿鸡"
print(b)
print(list(b))

输出为

dict_items([('姓名', '张三'), ('年龄', 28)])
[('姓名', '张三'), ('年龄', 28)]
----------------
dict_items([('姓名', '阿鸡'), ('年龄', 28)])
[('姓名', '阿鸡'), ('年龄', 28)]

(4)dict.get(key[, default]) 作用:返回指定的键 key 对应的值,key不存在时,返回default(默认None)

a = dict([("姓名", "张三"), ("年龄", 28)])
print(a.get("姓名"))

输出为

张三

2,改

(1)dict.update([other]) 作用: 使用other传入的键值对更新字典,如果jian相同,则覆盖原有键; other需要是字典对象、包含键值对的可迭代对象、关键字参数; 原有修改,无返回值

a = dict([("姓名", "张三"), ("年龄", 28)])
a.update({"练习" : "两年半"})
print(a)

输出为

{'姓名': '张三', '年龄': 28, '练习': '两年半'}

(2)dict.pop(key[, default]) 作用:移除指定的键key,并返回对应的值value

a = dict([("姓名", "张三"), ("年龄", 28)])
print(a.pop("姓名"))
print(a)

输出为

张三
{'年龄': 28}

(3)dict.popitem() 作用:从字典中移除最后一个键值对, 并返回它们构成的元组

a = dict([("姓名", "张三"), ("年龄", 28)])
print(a.popitem())
print(a)

输出为

('年龄', 28)
{'姓名': '张三'}

(4)dict.clear() 作用:移除字典中的所有元素,无返回值

a = dict([("姓名", "张三"), ("年龄", 28)])
a.clear()
print(a)

输出为

{}

3,其他

(1)dict.copy() 作用:返回原字典的浅拷贝

a = dict([("姓名", "张三"), ("年龄", 28)])
b = a.copy()
print(b)

输出为

{'姓名': '张三', '年龄': 28}