字典是另一种可变容器模型,且可存储任意类型对象。自描述型数据结构
- 字典是可变类型,
- 字典中的数据是无序的
- 一个字典条目的语法是 键:值,键一般是唯一的,如果重复最后的一个键值对会替换前面的,值不需要唯一,
- 值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组
- key 整型,字符串的居多,valu随意
- 创建字典语法:花括号:{key1 : value1, key2 : value2 } 花括号表示,对用冒号 : 分割,每个键值对之间用逗号 , 分割
dict = {'a': 'zhangsan', 'b': 'lisi', 'b': 'tiantian'} print dict 输出:{'a': 'zhangsan', 'b': 'tiantian'}
访问字典里的值:通过key dic[key] 如果key不存在,报KeyError 没有索引!不能分片!
dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'} print dict['Name'] #输出Zara print dict['Name1'] #会报错,提示 KeyError: 'Name1'
修改字典:向字典添加新内容的方法是增加新的键/值对
语法:dic[key] = value,key不存在,就是新增字典;如果key存在,就是更新字典的值,例子:
dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First','School':'Middle'} dict['Name'] = 'Tom';dict['Teacher']='Mrs Li' #把名字的值修改为Tom,增加了一个teacher内容 print dict #输出 {'School': 'Middle', 'Teacher': 'Mrs Li', 'Age': 7, 'Name': 'Tom', 'Class': 'First'}
删除字典元素: del dic[key] 删除键是'key'的条目 ; del dict 删除词典
dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First','School':'Middle'} del dict['Name'] # 删除键是'Name'的条目 dict.clear() # 清空词典所有条目 del dict() # 删除词典 print dict #此时输出会报错,SyntaxError: can't delete function call 不能删除函数调用
字典内置函数&方法
内置函数如下:
Python字典的 cmp() 函数比较两个字典元素,cmp(dict1, dict2) ,两个字典元素相同返回0,字典dict1大于字典dict2返回1,字典dict1小于字典dict2返回-1。
dict1 = {'Name': 'Zara', 'Age': 7, 'Class': 'First','School':'Middle'} dict2 ={'province':'甘肃','name':'雷志强','level':'厅长','behavior':'贪污','money':'93亿'} print cmp(dict1,dict2) #返回-1字典(Dictionary) len() 函数计算字典元素个数,即键的总数。
dict2 ={'province':'甘肃','name':'雷志强','level':'厅长','behavior':'贪污','money':'93亿'} print len(dict2) #返回5
Python 字典(Dictionary) str() 函数将值转化为适于人阅读的形式,以可打印的字符串表示。
dict1 = {'Name': 'Zara', 'Age': 7, 'Class': 'First','School':'Middle'} print str(dict1) #结果: {'School': 'Middle', 'Age': 7, 'Name': 'Zara', 'Class': 'First'}
Python 字典(Dictionary) type() 函数返回输入的变量类型,如果变量是字典就返回字典类型。
print type(dict2) #输出: <type 'dict'>方法
dict2 ={'province':'甘肃','name':'雷志强','level':'厅长','behavior':'贪污','money':'93亿'} dict2.clear() print len(dict2) #输出0dict.copy() 返回一个字典的浅复制
dict1 = {'Name': 'Zara', 'Age': 7, 'Class': 'First','School':'Middle'} print dict1.copy() #输出还是 {'Class': 'First', 'School': 'Middle', 'Age': 7, 'Name': 'Zara'}dict.fromkeys(seq[, val]) 创建一个新字典,以序列 seq 中元素做字典的键,val 为字典所有键对应的初始值
A = ('place','weather','wet','warm') dict1=dict.fromkeys(A) print dict1 #输出: {'warm': None, 'weather': None, 'place': None, 'wet': None}dict.get(key, default=None) 返回指定键的值,如果值不在字典中返回default值
dict1 = {'Name': 'Zara', 'Age': 7, 'Class': 'First','School':'Middle'} print dict1.get('Class') #这个结果是 First print dict1.get('Class123') # 这个结果是 None
dict.has_key(key) 如果键在字典dict里返回true,否则返回false:判断key存在
d= {'k3': 3, 'k2': 2, 'k1': 1} print d.has_key('k3') if 'k3' in d:#两种方法:True
dict.items() 以列表返回可遍历的(键, 值) 元组数组 ;dict.keys() 以列表返回一个字典所有的键 ; dict.values() 以列表返回字典中的所有值
pop(key[,default]) 删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。 |
dict1 = {'Name': 'Zara', 'Age': 7, 'Class': 'First','School':'Middle'} print dict1.has_key('Name2') #判断key存在 False print dict1.keys() #返回一个包含字典所有KEY的列表 ['School', 'Age', 'Name', 'Class'] print dict1.values() #返回一个包含字典所有value的列表 ['Middle', 7, 'Zara', 'First'] print dict1.items() #返回一个包含所有(键,值)元祖的列表 [('School', 'Middle'), ('Age', 7), ('Name', 'Zara'), ('Class', 'First')] print dict1.pop('Age') #删除键key的项并返回key对应的 value值 如果key不存在,报错 返回7,
dict.update(bdict) 将字典bdict的键值对添加到字典adict中 key存在,就更新value。key不存在就新增数据项 类似于字典合并
#字典合并 dict1 = {'zhangsan': '2341', 'lisi': '9102', 'tiantian': '3258'} dict2 = {'wangyi': '2341', 'zhangsan': '9889', 'lisi': '7540'} dict1.update(dict2) print dict1 #输出结果:{'tiantian': '3258', 'lisi': '7540', 'wangyi': '2341', 'zhangsan': '9889'}
popitem() 随机返回并删除字典中的一对键和值 |
dict1 = {'zhangsan': '2341', 'lisi': '9102', 'tiantian': '3258'} print dict1.popitem() #输出 随机的一堆键和值 ('tiantian', '3258') print dict1 #输出删除后的字典 {'lisi': '9102', 'zhangsan': '2341'}
练习题目:把字符串”k1:1|k2:2|k3:3”处理成 python 字典的形式:{'k3': 3, 'k2': 2, 'k1': 1}
string = "k1:1|k2:2|k3:3" d = {} for kv in string.split("|"): k, v = kv.split(":") if v.isdigit(): v = int(v) d[k] = v print d
输出:{'k3': 3, 'k2': 2, 'k1': 1}
注意:用key取value 层层递进