网站制作常用代码,企业网站系统设计,做网站推广的公司发展前景,大专动漫设计有出路吗Python 容器(二)#xff1a;字典(Dict)一、字典1、定义#xff1a;Python的字典数据类型是基于hash散列算法实现的#xff0c;采用键值对(key:value)的形式#xff0c;根据key的值计算value的地址#xff0c;具有非常快的查取和插入速度。2、特点#xff1a;1#xff09…Python 容器(二)字典(Dict)一、字典1、定义Python的字典数据类型是基于hash散列算法实现的采用键值对(key:value)的形式根据key的值计算value的地址具有非常快的查取和插入速度。2、特点1字典包含的元素个数不限 2值的类型可以是任何数据类型 3字典的key必须是不可变的对象例如整数、字符串、bytes和元组最常见的还是将字符串作为4key。列表、字典、集合等就不可以作为key。 5同时同一个字典内的key必须是唯一的但值则不必。 6从Python3.6开始字典是有序的。它将保持元素插入时的先后顺序。2、创建字典# dict()函数是Python内置的创建字典的方法。
dic {} # 创建空字典
# 直接赋值创建字典
dic {Alice: 2341, Beth: 9102, Cecil: 3258}
# 通过dict()创建字典一dict([(sape, 4139), (guido, 4127), (jack, 4098)])
{sape: 4139, jack: 4098, guido: 4127}
# 通过dict()创建字典二dict(sape4139, guido4127, jack4098)
{sape: 4139, jack: 4098, guido: 4127}3、访问字典虽然现在3.6版本后的字典在访问时有序了但字典依然是集合类型不是序列类型因此没有索引下标的概念更没有切片的说法。 但与list类似的地方是字典采用把相应的键放入方括号内获取对应值的方式取值。 fruit_dic {name:apple, color:red, shape:round, taste:sweet}fruit_dic[name]
apple
# 如果访问一个不存在的keyfruit_dic[cc]
Traceback (most recent call last):File stdin, line 1, in module
KeyError: cc4、增加和修改增加就是往字典里插入新的键值对修改就是给原有的键赋予新的值。由于一个key只能对应一个值所有多次对一个可以赋值后面的值会把前面的值冲掉。 fruit_dic {name:apple, color:red, shape:round, taste:sweet}fruit_dic[name]
applefruit_dic[name] lemonfruit_dic[name]
lemonfruit_dic[name] bananafruit_dic[name] cherryfruit_dic
{color: red, taste: sweet, shape: round, name:cherry}
# 上面字典的顺序出现的不同是因为使用的是python2.7 。
# 通过for循环来创建(更新)字典
dic {}
for i in eafgdgd:dic[i] ord(i)
print(dic)# {e: 101, a: 97, f: 102, g: 103, d: 100}5、 删除字典元素、清空字典和删除字典 dic
{Name: Jack, Age: 20, Class: First, sex: male}del dic[Name] # 删除指定的键dic
{Age: 20, Class: First, sex: male}
# ------------------a dic.pop(Class) # 弹出并返回指定的键。必须提供参数a
Firstdic
{Name: Jack, Age: 7}
# ------------------dic.clear() # 清空字典dic
{}
# ------------------del dic # 删除字典本身dic
Traceback (most recent call last):File pyshell#20, line 1, in moduledic
NameError: name dic is not defined6、字典copypython字典的copy( )函数返回一个字典的浅复制。 使用方式 dict.copy( ) dict1 {Name: Jim, Age:9}dict2 dict1.copy()dict2
{Age: 9, Name: Jim}那么直接赋值和copy有什么区别呢dict1 {user:runoob,num:[1,2,3]}dict2 dict1 # 浅拷贝: 引用对象
dict3 dict1.copy() # 浅拷贝深拷贝父对象一级目录子对象二级目录不拷贝还是引用# 修改 data 数据
dict1[user]root
dict1[num].remove(1)# 输出结果print(dict1)
{user: root, num: [2, 3]}print(dict2)
{user: root, num: [2, 3]}print(dict3)
{user: runoob, num: [2, 3]}实例中 dict2 其实是 dict1 的引用别名所以输出结果都是一致的dict3 父对象进行了深拷贝不会随dict1 修改而修改子对象是浅拷贝所以随 dict1 的修改而修改。 而且注意python的运算规律更多见 Python 直接赋值、浅拷贝和深度拷贝解析7、字典(Dictionary)的 fromkeys()方法Python 字典 fromkeys() 函数用于创建一个新字典以序列 seq 中元素做字典的键value 为字典所有键对应的初始值。 语法 dict.fromkeys(seq[, value]) seq (Google, Runoob, Taobao)dict dict.fromkeys(seq)
{Google: None, Taobao: None, Runoob: None}dict dict.fromkeys(seq, 10)
{Google: 10, Taobao: 10, Runoob: 10}
# fromkeys()的方法只能赋唯一值给key。。。dict dict.fromkeys(seq,seq)dict
{Google: (Google, Runoob, Taobao), Taobao: (Google, Runoob, Taobao), Runoob: (Google, Runoob, Taobao)}8、get(key)get(key) # 返回指定键的值如果键不在字典中则返回default值 dic {Name: Jack, Age: 7, Class: First}dic.get(Name)
Jack
# 注意name 不是Name 所以下面的访问不存在的name没有报错但不会显示Nonedic.get(name) dic[name]
Traceback (most recent call last):File stdin, line 1, in module
KeyError: name9、items( )、keys( )、values( )items( ) # 以列表返回可遍历的(键, 值) 元组对 keys( ) 以列表返回字典所有的键 values( ) 以列表返回字典所有的值 dic {Name: Jack, Age: 7, Class: First}dic.items()
dict_items([(Name, Jack), (Age, 7), (Class, First)])dic.values()
dict_values([Jack, 7, First])dic.keys()
dict_keys([Name, Age, Class])10、pop(key) 与popitem( )pop(key) 删除并返回指定key的值 dic {Name: Jack, Age: 7, Class: First}a dic.pop(Name)dic
{Age: 7, Class: First}a
Jackpopitem( ) 删除并返回字典的最后一个键值对不接受参数。 dic {Name: Jack, Age: 7, Class: First}dic.popitem(Age)
Traceback (most recent call last):File stdin, line 1, in module
TypeError: popitem() takes no arguments (1 given)b dic.popitem()dic
{Name: Jack, Age: 7}b
(Class, First)11、setdefault(key, defaultNone)setdefault(key, defaultNone) 和get()类似,但如果键不存在于字典中将会添加键并将值设为default dic {Name: Jack, Age: 7, Class: First}dic.setdefault(id)dic
{Name: Jack, Age: 7, Class: First, id: None}dic.setdefault(id,10) # 再次使用改变不了键id的值了。dic
{Name: Jack, Age: 7, Class: First, id: None}dic {Name: Jack, Age: 7, Class: First}dic.setdefault(id,10)
10dic
{Name: Jack, Age: 7, Class: First, id: 10}12、updatedict2update(dict2) 把字典dict2的键/值对更新到dict里 (在list中使用extend) dic {Name: Jack, Age: 7, Class: First, id: 10}seq {Google: 10, Taobao: 10, Runoob: 10}dic.update(seq)dic
{Name: Jack, Age: 7, Class: First, id: 10, Google: 10, Taobao: 10, Runoob: 10}13、 遍历字典从Python3.6开始遍历字典获得的键值对是有序的dic {Name: Jack, Age: 7, Class: First}# 1 直接遍历字典获取键根据键取值dic {Name: Jack, Age: 7, Class: First}for key in dic:
... print(key, dic[key])
...
Name Jack
Age 7
Class First# 2 利用items方法获取键值速度很慢少用for key, value in dic.items():
... print(key,value)
...
Name Jack
Age 7
Class First#3 利用keys方法获取键for key in dic.keys():
... print(key, dic[key])
...
Name Jack
Age 7
Class First#4 利用values方法获取值但无法获取对应的键。for value in dic.values():
... print(value)
...
Jack
7
First14、 利用循环构造字典# 比较经典的一种用法dic {}for i in aefegd:
... dic[i] ord(i)
...dic
{a: 97, e: 101, f: 102, g: 103, d: 100}